算法分析与设计实验报告七.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析与设计实验七 2012级计算机科学与技术专业 姓名 牛立峰 学号 201215203 实验题目 编写拉斯维加斯整数因子分解算法和八皇后算法 实验目的 通过上机实验,了解并掌握概率算法思想 源代码 整数因子分解: //随机化算法 拉斯维加斯算法 因子分割问题 //#include stdafx.h //#include RandomNumber.h #include iostream using namespace std; #includetime.h #includemath.h //随机数类 const unsigned long maxshort = 65536L; const unsigned long multiplier = 1194211693L; const unsigned long adder = 12345L; class RandomNumber { private: //当前种子 unsigned long randSeed; public: RandomNumber(unsigned long s = 0);//构造函数,默认值0表示由系统自动产生种子 unsigned short Random(unsigned long n);//产生0:n-1之间的随机整数 double fRandom(void);//产生[0,1)之间的随机实数 }; RandomNumber::RandomNumber(unsigned long s)//产生种子 { if(s == 0) { randSeed = time(0);//用系统时间产生种子 } else { randSeed = s;//由用户提供种子 } } unsigned short RandomNumber::Random(unsigned long n)//产生0:n-1之间的随机整数 { randSeed = multiplier * randSeed + adder;//线性同余式 return (unsigned short)((randSeed16)%n); } double RandomNumber::fRandom(void)//产生[0,1)之间的随机实数 { return Random(maxshort)/double(maxshort); } int Split(int n) { int m = floor(sqrt(double(n))); for (int i=2; i=m; i++) { if (n%i==0) { return i; } } return 1; } //求整数a和b最大公因数的欧几里得算法 int gcd(int a,int b) { if(b==0) { return a; } else { return gcd(b,a%b); } } //求整数n因子分割的拉斯维加斯算法 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; //x[i]=(x[i-1]^2-1) mod n int d = gcd(y-x,n); //求n的非平凡因子 if((d1) (dn)) { coutdendl;//因子分割问题:求n的[一]个非平凡因子的问题 return; } if(i == k) { y = x; k *= 2; } } } int main() { int n = 1024; coutn的非平凡因子:endl; Pollard(n); return 0; } 八皇后问题: #includestdio.h const int num = 8;/*可以随意修改,num是多少解的就是几皇后问题*/ int arr[num]; int count =0; void display()/*一个简单的数组输出函数,顺便统计解的个数*/ { for(int i=0; inum; ++i) printf(%d\t,arr[i]); printf(\n); count++; } void queens(int pos=0)

文档评论(0)

133****5313 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档