【发布时间】:2015-05-22 14:28:53
【问题描述】:
//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。
输出如下:
输入质数 p:1997
一个 -> 1557
p -> -984
输入的数字不是质数!
temp1 -> 0
请重新输入质数 p:
【问题讨论】:
-
这是用于大素数测试的函数,它适用于像13和17这样的非常小的数字,但是一旦我输入大数,它就会出现负数,所以我在这里发布,有人可以给我答案?
-
long int不足以满足您的需求。出于测试目的,将其更改为long long int。但即使这样也不足以用于任何实际用途,您还需要使用 bigints。 -
@mtijanic:OP 的示例对于 bigint 来说有点太大了,大约是 38 个宇宙的倍数。
-
@Jongware 我只是查看了实际数字.. 是的,那是行不通的。如果您想使用 Lehmann 算法,则需要非常自定义的 int 表示,我怀疑它是否可行。尝试另一种算法,例如筛子。
-
是的,我确实想用更好的让它工作,但情况是我必须使用 Lehmann,所以..
标签: c rsa number-theory