c_cpp 【随机化算法】素数测试【7.5.3】蒙特卡罗(Monte Carlo)算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 【随机化算法】素数测试【7.5.3】蒙特卡罗(Monte Carlo)算法相关的知识,希望对你有一定的参考价值。
//随机化算法 蒙特卡罗算法 素数测试问题
#include "stdafx.h"
#include "RandomNumber.h"
#include <cmath>
#include <iostream>
using namespace std;
//计算a^p mod n,并实施对n的二次探测
void power(unsigned int a,unsigned int p,unsigned int n,unsigned int &result,bool &composite)
{
unsigned int x;
if(p == 0)
{
result = 1;
}
else
{
power(a,p/2,n,x,composite); //递归计算
result = (x*x)%n; //二次探测
if((result == 1) && (x!=1) && (x!=n-1))
{
composite = true;
}
if((p%2)==1)
{
result = (result*a)%n;
}
}
}
//重复调用k次Prime算法的蒙特卡罗算法
bool PrimeMC(unsigned int n,unsigned int k)
{
RandomNumber rnd;
unsigned int a,result;
bool composite = false;
for(int i=1; i<=k; i++)
{
a = rnd.Random(n-3)+2;
power(a,n-1,n,result,composite);
if(composite || (result!=1))
{
return false;
}
}
return true;
}
int main()
{
int k = 10;
for(int i=1010;i<1025;i++)
{
cout<<i<<"的素数测试结果为:"<<PrimeMC(i,k)<<endl;
}
return 0;
}
以上是关于c_cpp 【随机化算法】素数测试【7.5.3】蒙特卡罗(Monte Carlo)算法的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 【随机化算法】随机数【7.1】
c_cpp 【随机化算法】计算定积分【7.2.2】
c_cpp 【随机化算法】计算π值【7.2.1】
c_cpp 【随机化算法】跳跃表【7.3.3】舍伍德(舍伍德)算法
c_cpp 【随机化算法】线性时间选择算法【7.3.1】舍伍德(舍伍德)算法
c_cpp 【随机化算法】搜索有序表【7.3.2】舍伍德(舍伍德)算法