Posted on 2010-08-20 01:14
Kevin_Zhang 阅读(338)
评论(0) 编辑 收藏 引用 所属分类:
数论
#include"iostream"
#include"stdio.h"
#include"stdlib.h"
#include"time.h" //系统时间函数的头文件
using namespace std;
int T;//the number of tests
int j,d,N;
void computejd(int n)//求j和d,这个是正确的,d为odd
{int m=n-1;
j=0;
while(1)
{
if(m%2==0){j++;m=m/2;}
else {d=m;break;}
}
return ;
}//right
int GetRand()//求随机数,种子为系统时间
{
srand(time(NULL)) ;
int n = rand()%(N-1)+1;
return n ;
}//right
int main()
{
int k;
printf("输入测试次数T:");
scanf("%d",&T);//right
for(int x=1;x<=T;x++)
{scanf("%d",&N);
computejd(N);
for(k=1000;k>0;k--)
{int b=GetRand();
int r0, r,r1,i;
r0=N-1;i=0;
r=1; r1=b%N;
for(int q=0; q<=31;q++)
{ if((d&1)==1) r=(r*r1)%N;
r1=(r1*r1)%N; d>>=1;
}
while(r!=1&&i<j)
{
r0=r;r=(r*r)%N;i++;
}
if(r==1||i>=j)
{
if(r==1&&r0==N-1)continue;
else break;
}
}
if(k==0)printf("prime\n");
else printf("not prime\n");
}//outside cycle
return 0;
}