C/C++ 模方程解的個數程式?
在數學中,**模方程**是由*模*滿足的代數方程,指的是模問題中的模。也就是說,給定模空間上的一些函式,模方程是在這些函式之間成立的方程,或者換句話說,是模的恆等式。
術語*模方程*最常見的用法是與橢圓曲線的模問題相關的。在這種情況下,模空間本身是一維的。這意味著模曲線函式域中的任意兩個有理函式*F*和*G*都將滿足模方程*P(F, G) = 0*,其中*P*是複數上兩個變數的非零多項式。對於合適的非退化選擇F和*G*,方程*P(X,Y) = 0*實際上將定義模曲線。
你剛剛看到了一種奇怪的數學表示式,形式為
B ≡ (A mod X)
這意味著B與A模X同餘。讓我們舉個例子:
21 ≡ 5(mod 4)
符號≡表示“等價”。在上式中,21和5是等價的。這是因為21模4 = 1等於5模4 = 1。另一個例子是51 ≡ 16(mod 7)
在這個問題中,我們有兩個整數a和b,我們必須找到滿足模方程(A mod X)=B的可能的x值的數量,其中X是模方程的解。
例如
Input: A = 26, B = 2 Output: X can take 6 values
解釋
X可以等於{3, 4, 6, 8, 12, 24}中的任何一個,因為A模這些值的任何一個都等於2,即**(26 mod 3) = (26 mod 4) = (26 mod 6) = (26 mod 8) = .... = 2**
我們有方程A mod X = B
條件
如果(A = B),則將有無限多個值,其中A始終大於X。
如果(A < B),則X不可能滿足模方程。
現在只剩下最後一種情況(A > B)。
現在,在這種情況下,我們將使用關係
被除數 = 除數 * 商 + 餘數
給定A(被除數)和B(餘數),X即為除數。
現在
A = X * 商 + B
設商用Y表示
∴ A = X * Y + B
A - B = X * Y
∴為了得到Y的整數值,
我們需要取所有X,使得X整除(A - B)
∴ X是(A - B)的約數
找到(A – B)的約數是主要問題,而這些約數的個數就是X可以取的可能值。
我們知道A mod X解的值將是從(0到X – 1),取所有滿足X > B的X。
這樣我們可以得出結論,(A – B)的約數個數大於B,所有可能的X值都可以滿足A mod X = 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;
}
}
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP