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】舍伍德(舍伍德)算法