-1
我想知道如果A和B是相對使用歐幾里德算法的素數。 A和B是不能以任何數據類型(C語言)存儲的大數字,因此它們存儲在鏈接列表中。在該算法中,使用運營商%
。我的問題是,有沒有一種方法可以計算A mod B,而不需要直接使用%
運算符。我發現%
是分配了另外:A模B,A和B是非常大的數字
A%B = ((a1%B)+(a2%B))%B.
但問題仍然存在,因爲我仍然會做%B
操作。
我想知道如果A和B是相對使用歐幾里德算法的素數。 A和B是不能以任何數據類型(C語言)存儲的大數字,因此它們存儲在鏈接列表中。在該算法中,使用運營商%
。我的問題是,有沒有一種方法可以計算A mod B,而不需要直接使用%
運算符。我發現%
是分配了另外:A模B,A和B是非常大的數字
A%B = ((a1%B)+(a2%B))%B.
但問題仍然存在,因爲我仍然會做%B
操作。
如果沒有%
運算符,則需要計算a % b
。好?根據定義,modulo operation在將一個數字除以另一個數字後找到remainder。
在蟒蛇:
# mod = a % b
def mod(a, b):
return a-b*int(a/b)
>>> x = [mod(i,j) for j in range(1,100) for i in range(1,100)]
>>> y = [i % j for j in range(1,100) for i in range(1,100)]
>>> x == y
真
在C++:
#include <iostream>
#include <math.h>
using namespace std;
unsigned int mod(unsigned int a, unsigned int b) {
return (unsigned int)(a-b*floor(a/b));
}
int main() {
for (unsigned int i=1; i<=sizeof(unsigned int); ++i)
for (unsigned int j=1; j<=sizeof(unsigned int); ++j)
if (mod(i,j) != i%j)
cout << "Somthing wrong!!";
cout << "Proved for all unsigned int!";
return 0;
}
事實證明,所有的unsigned int類型!
現在,只需將結果擴展到您的大數字...... !!!
你想要[二進制GCD算法](https://en.wikipedia.org/wiki/Binary_GCD_algorithm) –