Miller_Rabbin 素数测试
来源:互联网 发布:动态表单数据库设计 编辑:程序博客网 时间:2024/06/05 15:03
/***********************************************名称:Miller_Rabbin素数测试程序作者:ForrestGump时间:2013-05-05时间复杂度:O((logn)^3)版本:v1.0***********************************************/#include<stdio.h>#include<stdlib.h>#include<time.h>#define s 100double random()//生成[0~1]之间的均匀随机数{return (double)rand()/RAND_MAX;}int random(int m)//生成[1~m-1]之间的均匀随机数{return (int)(random()*(m-2)+1.5);}__int64 quick_mod(__int64 a,__int64 n,__int64 m)//快速求a的b次方mod c{ __int64 d,t; d=1; t=a; while (n>0) { if (n%2==1)//模拟二进制 d=(d*t)%m; n/=2; t=(t*t)%m; }return d;}bool Miller_Rabbin(__int64 n)//素数测试{for(int i=0;i<s;i++){__int64 a=(__int64)random(n);if(quick_mod(a,n-1,n)!=1){return false;}}return true;}int main(){__int64 n;while(scanf("%I64d",&n)!=EOF){srand(time(NULL));//初始化随机数种子 if(Miller_Rabbin(n)&&n!=1) printf("true\n"); else printf("false\n");}}