随机算法里的大数因子分解(Pollard Rho启发式算法),vc++6.0中实现,写的时候测的数比较小,只用了int,懒得改了,再用的时候再改成更大的数据类型:
001 #include<iostream>
002 #include<vector>
003 #include<algorithm>
004 #include<cmath>
005 #include<stdlib.h>
006
007 using namespace std;
008
009 int randint(int l,int u)
010 {
011 return l+rand()%(u-l+1);
012 }
013
014 int gcd(int m,int n)
015 {
016 return n?gcd(n,m%n):m;
017 }
018
019 bool isPrime(int n)
020 {
021 if(n<2)
022 return true;
023 for(int i=2;i<=pow(n,0.5);i++)
024 if(n%i==0)
025 return false;
026 return true;
027 }
028
029 //判断分解是否结束:0,恰好结束
030 // 1,超过被分解数
031 // 2,分解数不够
032 int ifenough(int n,vector<int>f)
033 {
034 int m=1;
035 for(int i=0;i<f.size();i++)
036 {
037 m*=f[i];
038 }
039 if(m==n)
040 return 0;
041 if(m>n)
042 return 1;
043 return 2;
044 }
045 void PollardRho(int num,int n,vector<int>& f )
046 {
047
048 if(isPrime(n))
049 {
050 f.push_back(n);
051 return;
052 }
053
054 vector<int> x;
055 int i=1;
056 x.push_back(-1);
057 x.push_back(randint(1,n));
058
059 int y=x[1];
060 int k=2;
061 while(true)
062 {
063 i++;
064 x.push_back((abs(x[i-1]*x[i-1]-1))%n);
065
066 int d=gcd(abs(y-x[i]),n);
067
068 if(d>1&&d<n)
069 {
070 PollardRho(num,d,f);
071 PollardRho(num,n/d,f);
072 }
073
074 if(i==k)
075 {
076 y=x[i];
077 k=2*k;
078 }
079
080 if(find(x.begin(),x.end()-1,x[i])!=x.end()-1||ifenough(num,f)==0||ifenough(num,f)==1)
081 {
082 break;
083 }
084 }
085 }
086
087 void repeatRho(int n)
088 {
089 vector<int> f;
090 for(int i=0;i<10000;i++)
091 {
092 f.clear();
093 PollardRho(n,n,f);
094
095 if(ifenough(n,f)==0)
096 {
097 sort(f.begin(),f.end());
098 for(int j=0;j<f.size();j++)
099 {
100 if(j!=f.size()-1)
101 cout<<f[j]<<"*";
102 else
103 cout<<f[j];
104 }
105 cout<<endl;
106 break;
107 }
108 }
109 }
110 int main()
111 {
112 int n;
113 cin>>n;
114 repeatRho(n);
115 }
分享到:
相关推荐
【标题】"skybox对地凝视-Las Vegas"揭示了一项高级的远程监控技术,它利用了Skybox系统对拉斯维加斯地区特定公路的实时观察。这项技术结合了高清卫星成像与智能分析算法,能够捕捉并解析地面上的动态情况。 【描述...
书中提到的两种主要的随机算法是Las Vegas算法和Monte Carlo算法。Las Vegas算法是指算法结果总是正确的,但是运行时间是随机的,例如快速排序算法。Monte Carlo算法则指结果带有概率性质,不一定总是正确,但算法...
在计算机科学领域,特别是算法设计中,Las Vegas算法是一种重要的随机算法。这个算法以其独特的性质在解决特定问题时展现了其高效的一面,尤其是在数据结构和计算复杂性理论的研究中占有显著地位。标题中的“las.zip...
这是本科算法(DS,DATA STRUCTURE)课程中中最重要的三种算法:KMP, Monte Carlo 和Las Vegas算法。资源里有做好的KMP, Monte Carlo 和Las Vegas算法代码以及2份算法报告。
### N皇后问题Las Vegas优化算法的实现 #### 引言 N皇后问题是一个经典的计算机科学问题,涉及到在N×N的棋盘上放置N个皇后,使得任何两个皇后都不在同一行、同一列或同一对角线上。这个问题不仅具有数学上的趣味...
随机算法可以分为几大类别,包括数值概率算法、Sherwood算法、Las Vegas算法和Monte Carlo算法。 数值概率算法主要用于数值问题的求解,它依赖于随机数生成来解决特定问题。计算机通常通过线性同余法来生成随机数,...
本资源主要讲解了随机算法中的重要概念和技术,涵盖了随机算法的基础知识、随机算法的设计和分析、NP 完全性问题、Monte Carlo 算法和 Las Vegas 算法、延迟决策原理、马尔科夫不等式、条件期望方法、奖券收集问题和...
东南大学计算机系的课程中,学生们会接触到多种算法,包括KMP字符串匹配算法、Monte Carlo算法和Las Vegas算法。这三种算法在数据结构(DS)的教学中占据着重要地位,因为它们涉及到不同的问题解决策略和复杂度分析...
- **Las Vegas方法**:这类算法虽然运行时间不确定,但最终一定能得出正确答案,只是所需时间可能在一定的概率分布下变化。 - **舍弃法**:如果算法在某次迭代中得到不理想的结果,可以抛弃并重新开始,直到满足某个...
标题中的“flash字幕-swishmax4_for_vegas”指的是使用SwishMax 4软件创建的Flash字幕,专门用于Vegas视频编辑软件。SwishMax 4是一款强大的动画制作工具,用户可以利用它轻松创建交互式的Flash内容,包括动态字幕。...
Las Vegas算法与Monte Carlo算法类似,也使用随机性,但其关键区别在于Las Vegas算法保证最终能找到正确解,只是所需的时间是随机的。该算法通常用于寻找最短路径、图的遍历等问题。如果运气好,算法可能在很短时间...
2. **拉斯维加斯算法**(Las Vegas Algorithms):这类算法保证了结果的准确性,但运行时间是随机的。也就是说,虽然结果一定是正确的,但运行时间可能是不确定的。 3. **谢伍德算法**(Sherwood Algorithms):这类...
随机算法可以分为两大类:Las Vegas算法和Monte Carlo算法。Las Vegas算法总是给出正确结果,但运行时间不确定;Monte Carlo算法运行时间固定,但结果的正确性有一定的概率保证。 2. 计算模型与复杂度类别:随机...
"las-vegas.zip"这个压缩包显然包含了与拉斯维加斯相关的CAD设计数据,这为我们提供了一个深入了解这座全球知名城市的建筑设计和城市规划的机会。 首先,我们注意到压缩包内的"las-vegas.dxf"文件,这是一个CAD数据...
随机算法实现N皇后问题,所用随机算法是Las Vegas随机算法
与Monte Carlo算法类似,Las Vegas算法也使用随机性,但不同的是,它在成功时总是能得出正确结果,只是成功所需的平均运行时间取决于随机性。在本实验中,Las Vegas算法被用来进一步确认由Monte Carlo算法得出的可能...
6. **概率算法和随机化**:如Monte Carlo方法、Las Vegas方法,用于处理NP难问题或提高算法效率。 7. **计算几何**:涉及平面几何中的算法,如最近点对问题、多边形求交等。 8. **字符串处理**:KMP、Boyer-Moore...