码迷,mamicode.com
首页 > 其他好文 > 详细

Miller_Rabin

时间:2017-10-06 20:34:05      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:long   name   turn   amp   log   prime   break   def   abi   

#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL;
int power(ULL a,int k,int mod){
ULL ans=1l;
	while(k){
		if(k&1)
			ans*=a;
		a*=a;
		a%=mod;
		ans%=mod;
		k>>=1;
	}
	return ans%mod;
}
bool is_prime(int x){
int n=x-1,a,b=0,k,v;
	if(x==2||x==3||x==5||x==7||x==11||x==13||x==17)return true;
	if(!x||x==1||!x&1||!x%3||!x%5||!x%7||!x%11||!x%13||!x%17)return false;
	while(~n&1){
		b++;
		n>>=1;
	}
	a=n;
	for(int ii=1;ii<=5;ii++){
		bool flag=true;
		k=rand()%(x-1)+1;
		v=power(k,a,x);
		if(v==1||v==x-1)
			continue;
		for(int i=0;i<=b;i++){
			v=(ULL)v*v%x;
			if(v==x-1){
				flag=false;
				break;
			}
		}
		if(flag)
			return false;
	}
	return true;
}
int main(){
	int k;
	scanf("%d",&k);
	if(is_prime(k))
		puts("Yes");
	else
		puts("No");
	return 0;
}

  

Miller_Rabin

标签:long   name   turn   amp   log   prime   break   def   abi   

原文地址:http://www.cnblogs.com/HC-LittleJian/p/7632565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!