//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