用於 C/C++ 中的模方程解的程式?
在這裡,我們將看到一個與模方程有關的有趣問題。假設我們有兩個值 A 和 B。我們必須找到變數 X 可以採用的可能值數,使得 (A mod X) = B 成立。
假設 A 為 26,B 為 2。那麼 X 的首選值將是 {3, 4, 6, 8, 12, 24}。因此,計數將為 6。這就是答案。讓我們看看演算法以獲得更好的理解。
演算法
possibleWayCount(a, b) −
begin if a = b, then there are infinite solutions if a < b, then there are no solutions otherwise div_count := find_div(a, b) return div_count end
find_div(a, b) −
begin n := a – b div_count := 0 for i in range 1 to square root of n, do if n mode i is 0, then if i > b, then increase div_count by 1 end if if n / i is not same as i and (n / i) > b, then increase div_count by 1 end if end if done end
示例
#include <iostream>
#include <cmath>
using namespace std;
int findDivisors(int A, int B) {
int N = (A - B);
int div_count = 0;
for (int i = 1; i <= sqrt(N); i++) {
if ((N % i) == 0) {
if (i > B)
div_count++;
if ((N / i) != i && (N / i) > B) //ignore if it is already counted
div_count++;
}
}
return div_count;
}
int possibleWayCount(int A, int B) {
if (A == B) //if they are same, there are infinity solutions
return -1;
if (A < B) //if A < B, then there are two possible solutions
return 0;
int div_count = 0;
div_count = findDivisors(A, B);
return div_count;
}
void possibleWay(int A, int B) {
int sol = possibleWayCount(A, B);
if (sol == -1)
cout << "For A: " << A << " and B: " << B << ", X can take infinite values greater than " << A;
else
cout << "For A: " << A << " and B: " << B << ", X can take " << sol << " values";
}
int main() {
int A = 26, B = 2;
possibleWay(A, B);
}輸出
For A: 26 and B: 2, X can take 6 values
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP