我想知道A和B是否是使用欧几里得算法的相对素数。 A和B是大数字,不能以任何数据类型存储(在C中),因此它们存储在链表中。在算法中,使用运算符%
。我的问题是,有没有一种方法来计算A mod B而不直接使用%
运算符。我发现%
对于加法是分配的:
A%B = ((a1%B)+(a2%B))%B.
但问题仍然存在,因为我仍然会进行%B
操作。
答案 0 :(得分:0)
您需要在没有a % b
运算符的情况下计算%
。好?根据定义,modulo operation在将一个数字除以另一个数字之后找到remainder。
在python中:
# 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!
现在,只需将结果扩展到您的大数字...... !!!