#include<iostream>
#include<time.h>
using namespace std;
long Pow(int a,int b) //计算a的b次方
{
intk;
longs=1;
for(k=1;k<=b;k++)
{
s*=a;
}
returns;
}
bool RandomPrimalityTest(int N) //蒙特卡罗测试
{
srand((unsigned)time(NULL));//初始化随机种子
inta=rand()%N; //随机产生小于N的整数
if(a==0)a=N-1;
longb=Pow(a,N-1)-1;
if(b%N==0)return true;
elsereturn false;
}
void RepeatCall(int N,int n=100) //重复调用RandomPrimalityTest函数n次
{
intk;
intcnt=0;
constdouble precison=0.90; //定义精度
for(k=1;k<=n;k++)if(RandomPrimalityTest(N)) cnt++;
doublee=cnt*1.0/n;
if(e>=precison)cout<<N<<"是素数"<<endl;
elsecout<<N<<"不是素数"<<endl;
}
void main()
{
intN;
cout<<"请输入一个整数:";
cin>>N;
if(!cin.good())
{
cerr<<"输入异常!"<<endl;
cin.clear();
return;
}
RepeatCall(N);
}
素数性测试的蒙特卡罗算法
原创
©著作权归作者所有:来自51CTO博客作者我是006的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:git提交出现“updates were rejected because a pushed branch tip is behind its remote”问题
下一篇:rm删除大量文件命令
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
MCMC(一):蒙特卡罗方法小结
l编辑:石头作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov ...
算法 机器学习 人工智能 python 深度学习