大牛来看一下这个我写的miler-rabin素数测试有啥问题
醉江楼 2013-01-21 04:40:06 #include<stdio.h>
#include<stdlib.h>
#include<time.h>
int modpow(int a,int b,int c)
{
int ans;
a=a%c;
ans=1;
while (b>0)
{
if (b%2==1) ans=(ans*a)%c;
b=b/2;
a=(a*a)%c;
}
return ans;
}
int MillerRabin(int n)
{
int i,a;
for (i=0;i<8;i++)
{
a=rand()%(n-2)+2;
if (modpow(a,n-1,n)!=1) return 0;
}
return 1;
}
int prime(int n)
{
int i;
for (i=2;i*i<=n;i++)
if (n%i==0) return 0;
return 1;
}
int main()
{
int n;
srand(time(NULL));
while (scanf("%d",&n)&&n)
{
MillerRabin(n)?printf("YES!\n"):printf("NO!\n");
prime(n)?printf("YES!\n"):printf("NO!\n");
}
return 0;
}