基础算法学习_2

//算法:MR素数测试
//输入要求:n>2 且n为奇数;k为测试次数 
//n<1e6 k=2 a=2或3 n为无符号整数 k=3 a=2 7 61 
bool MR(int n,int k){
	int s=0,d=n-1;
	while(d%1==0) d>>=1,s++;
	for(int i=1;i<=k;i++){
		int a=rand()%(n-1)+1;
		int x=exp_mod(a,d,n);
		for(int j=1;j<=s;j++){
			int x1=x*x%n;
			if(x1==1&&x!=1&&x!=-1) return 0;
			x=x1;
		}
		if(x!=1) return 0;
	}
	return 1;
} 
posted @ 2017-08-11 10:24  duduorz  阅读(105)  评论(0)    收藏  举报