拉斯维加斯 整数分割

来源:互联网 发布:mac finder添加 编辑:程序博客网 时间:2024/04/29 23:42

拉斯维加斯算法解决整数分割(一次)

 

// 整数分割.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
#include "stdafx.h"
#include"iostream"
#include<math.h>
#include<time.h>
#include<iomanip>
using namespace std;
const unsigned long maxshort=65535L;
const unsigned long multiplier=1194211693L;
const unsigned long adder=12345L;
class RandomNumber{
private:
 //当前种子
 unsigned long randSeed;
public:
 //构造函数
 RandomNumber(unsigned long s=0);
 unsigned short Random(unsigned long n);
 double fRandom();
};


RandomNumber::RandomNumber(unsigned long s)
{
 if(s==0)
  randSeed=time(0);
 else
  randSeed=s;
}

double RandomNumber::fRandom()
{
 return Random(maxshort)/double(maxshort);
}

unsigned short RandomNumber::Random(unsigned long n)
{
 randSeed=multiplier*randSeed+adder;
 return (unsigned short)((randSeed>>16)%n);
}

int gcd(int a,int b)//求最大公因数
{
 if(b==0) return a;
 else
  return gcd(b,a%b);
}

void Pollard(int n)
{
 RandomNumber rnd;
 int i=1;
 int x=rnd.Random(n);
 int y=x;
 int k=2;
 while(true)
 {
  i++;
  x=(x*x-1)%n;
  int d=gcd(y-x,n);
  if((d>1)&&(d<n))

 {
   cout<<d<<endl;

   return;

}

 else if(i==k)
  {
   y=x;
   k*=2;
  }
 }
}

int _tmain(int argc, _TCHAR* argv[])
{
 Pollard(49);
 
}

原创粉丝点击