Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

모듈식 방정식에 대한 솔루션의 수에 대한 C/C++ 프로그램?

<시간/>

수학에서 모듈 방정식 moduli로 충족되는 대수 방정식입니다. , 모듈 문제의 의미에서. 즉, 모듈러 공간에 여러 함수가 주어지면 모듈식 방정식은 둘 사이를 유지하는 방정식, 즉 모듈리의 항등식입니다.

모듈식 방정식이라는 용어가 가장 자주 사용됨 타원 곡선의 계수 문제와 관련이 있습니다. 이 경우 계수 공간 자체는 차원 1입니다. 이는 두 개의 유리 함수 F가 및 G , 모듈러 곡선의 함수 필드에서 모듈식 방정식 P(F, G) =0을 충족합니다. P 복소수에 대한 두 변수의 0이 아닌 다항식. F 및 G의 적절한 비퇴화 선택 , 방정식 P(X,Y) =0 실제로 모듈러 곡선을 정의합니다.

형식의 이상한 종류의 수학적 표현을 보았습니다.

B ≡ (A 모드 X)

이것은 B가 A 모듈로 X와 합동임을 나타냅니다. 예를 들어 보겠습니다.

21 ≡ 5( 모드 4)

기호 등가는 "등가"를 의미합니다. 위의 방정식에서 21과 5는 동일합니다. 이것은 21 모듈로 4 =1이 5 모듈로 4 =1과 같기 때문입니다. 또 다른 예는 51 ≡ 16( mod 7)

입니다.

이 문제에서는 두 개의 정수와 b가 있고 모듈식 방정식 (A mod X)=B를 따르는 가능한 값 x의 수를 찾아야 합니다. 여기서 모듈식 방정식의 X 솔루션입니다.

예를 들어

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

설명

X는 A 계수가 2i와 같으므로 {3, 4, 6, 8, 12, 24} 중 하나와 같을 수 있습니다. 예:(26 mod 3) =(26 mod 4) =(26 mod 6) =(26 mod 8) =.... =2

A mod X =B

방정식이 있습니다.

조건

(A =B)이면 A가 항상 X보다 큰 값이 무한히 많을 것입니다.

(A

이제 마지막 경우(A> B)만 남았습니다.

이제 이 경우 관계를 사용하겠습니다.

배당금 =제수 * 몫 + 나머지

X 즉, A 즉 배당금 및 B 즉, 나머지가 주어진 제수

지금

A =X * 몫 + B

몫을 Y로 나타내도록 하십시오.

∴ A =X * Y + B

A - B =X * Y


∴ Y의 정수 값을 얻으려면,

우리는 X가 (A - B)를 나누도록 모든 X를 취해야 합니다.


∴ X는 (A - B)의 약수입니다.

(A – B)의 제수를 찾는 것이 주요 문제이며 그러한 제수의 수는 X가 취할 수 있는 가능한 값입니다.

우리는 A mod X 솔루션 값이 (0에서 X – 1까지) X> B와 같은 모든 X를 취한다는 것을 알고 있습니다.

이런 식으로 우리는 A mod X =B

를 만족할 수 있는 모든 가능한 값 X와 함께 (A – B)의 제수의 수가 B보다 크다고 결론을 내릴 수 있습니다.

예시

#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;
   }
}