Computer >> Máy Tính >  >> Lập trình >> lập trình C

Chương trình C / C ++ cho Số giải pháp cho phương trình mô-đun?

Trong toán học, một phương trình mô-đun là một phương trình đại số được thỏa mãn bởi moduli , theo nghĩa của vấn đề moduli. Nghĩa là, cho một số hàm trên một không gian mô-đun, một phương trình mô-đun là một phương trình giữ giữa chúng, hay nói cách khác là một danh tính cho mô-đun.

Việc sử dụng thuật ngữ phương trình mô-đun thường xuyên nhất liên quan đến các bài toán moduli cho đường cong elliptic. Trong trường hợp đó, bản thân không gian moduli có chiều một. Điều đó ngụ ý rằng bất kỳ hai hàm hợp lý F G , trong trường chức năng của đường cong mô-đun, sẽ thỏa mãn một phương trình mô-đun P (F, G) =0 với P một đa thức khác 0 của hai biến trên các số phức. Để có sự lựa chọn không thoái hóa phù hợp của F và G , phương trình P (X, Y) =0 sẽ thực sự xác định đường cong mô-đun.

Bạn vừa thấy một loại biểu thức toán học kỳ lạ có dạng

B ≡ (A mod X)

Điều này nói rằng B đồng dư với A modulo X. Hãy lấy một ví dụ,

21 ≡ 5 (mod 4)

Một biểu tượng tương đương có nghĩa là "Tương đương". Trong phương trình trên, 21 và 5 là tương đương. Điều này là do 21 modulo 4 =1 bằng 5 modulo 4 =1. Một ví dụ khác là 51 ≡ 16 (mod 7)

Trong bài toán này, chúng ta có hai số nguyên a và b và chúng ta phải tìm số giá trị x có thể tuân theo phương trình mô-đun (A mod X) =B trong đó X nghiệm của phương trình mô-đun.

Ví dụ

Input: A = 26, B = 2
Output: X can take 6 values

Giải thích

X có thể bằng bất kỳ trong số {3, 4, 6, 8, 12, 24} vì A mô đun bất kỳ giá trị nào trong số này bằng 2 i. e., (26 mod 3) =(26 mod 4) =(26 mod 6) =(26 mod 8) =.... =2

Ta có phương trình A mod X =B

Điều kiện

nếu (A =B) thì sẽ có vô số giá trị trong đó A luôn lớn hơn X.

nếu (A

Bây giờ chỉ còn lại trường hợp cuối cùng đó là (A> B).

Bây giờ, trong trường hợp này, chúng ta sẽ sử dụng quan hệ

Cổ tức =Số chia * Thương + Phần còn lại

X tức là các số chia cho A tức là Cổ tức và B tức là phần còn lại.

Bây giờ

A =X * Thương số + B

Để cho Thương số được biểu diễn dưới dạng Y

∴ A =X * Y + B

A - B =X * Y


∴ Để nhận các giá trị tích phân của Y,

chúng ta cần lấy tất cả X sao cho X chia hết (A - B)


∴ X là ước của (A - B)

tìm các ước của (A - B) là vấn đề chính và số ước như vậy là các giá trị mà X có thể nhận.

chúng ta biết rằng các giá trị nghiệm A mod X sẽ từ (0 đến X - 1) lấy tất cả các X sao cho X> B.

Theo cách này, chúng ta có thể kết luận bằng cách nói rằng số ước của (A - B) lớn hơn B, với tất cả các giá trị X có thể thỏa mãn A mod X =B

Ví dụ

#include <iostream>
#include <math.h>
using namespace std;
int Divisors(int A, int B) {
   int N = (A - B);
   int D = 0;
   for (int i = 1; i <= sqrt(N); i++) {
      if ((N % i) == 0) {
         if (i > B)
            D++;
         if ((N / i) != i && (N / i) > B)
            D++;
      }
   }
   return D;
}
int PossibleWaysUtil(int A, int B) {
   if (A == B)
      return -1;
   if (A < B)
      return 0;
   int D = 0;
   D = Divisors(A, B);
   return D;
}
int main() {
   int A = 26, B = 2;
   int Sol = PossibleWaysUtil(A, B);
   if (Sol == -1) {
      cout <<" X can take Infinitely many values greater than " << A << "\n";
   } else {
      cout << " X can take " << Sol << " values\n";
      return 0;
   }
}