//test whether it is prime number ot not
int prime_test(long int prime_number)
{
long int a, p;
srand((unsigned)time(NULL));
//0 and 1 not meaning for prime test.
a = rand() % (prime_number - 2) + 2;
printf("a -> %li\n", a);
//Lehmann Algorithm, p = a^((prime_number-1)/2) mod prime_number
p = (long int)pow(a, (prime_number - 1)/2) % prime_number;
printf("p -> %li\n", p);
if(p != 1 & (prime_number - p) != 1)
{
printf("Enter number is not prime number.\n");
return 0;
}
else
{
printf("Enter number is prime number.\n");
return 1;
}
}
我的问题是,为什么我得到阴性p -984,1997年实际上是一个素数,
应该是1或-1无论是。 输出就像下面:RSA密钥生成
输入素数p:1997年
一个 - > 1557
p - > -984
输入的号码是不是质数!
temp1目录 - > 0
请重新输入素数p:
这是用于大素数测试的函数,它适用于像13和17这样的非常小的数字,但是一旦我输入大数字,就会出现负数,所以我在这里发帖,可以有人给我答案吗? – Seven
'long int'远远不够你想要的。出于测试目的将其改为'long long int'。但即使这样还不足以用于任何实际使用,您需要使用bigint。 – mtijanic
@mtijanic:OP的例子对于bigint来说有点太大了,大约有38个宇宙。 – usr2564301