`
daweibalong
  • 浏览: 45719 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

随机算法--Las Vegas--大数因子分解--Pollard Rho启发式算法(c++版)

阅读更多

 

随机算法里的大数因子分解(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"揭示了一项高级的远程监控技术,它利用了Skybox系统对拉斯维加斯地区特定公路的实时观察。这项技术结合了高清卫星成像与智能分析算法,能够捕捉并解析地面上的动态情况。 【描述...

    高级算法-随机算法

    书中提到的两种主要的随机算法是Las Vegas算法和Monte Carlo算法。Las Vegas算法是指算法结果总是正确的,但是运行时间是随机的,例如快速排序算法。Monte Carlo算法则指结果带有概率性质,不一定总是正确,但算法...

    las.zip_LAS算法语义_Las Vegas

    在计算机科学领域,特别是算法设计中,Las Vegas算法是一种重要的随机算法。这个算法以其独特的性质在解决特定问题时展现了其高效的一面,尤其是在数据结构和计算复杂性理论的研究中占有显著地位。标题中的“las.zip...

    KMP, Monte Carlo ,Las Vegas算法

    这是本科算法(DS,DATA STRUCTURE)课程中中最重要的三种算法:KMP, Monte Carlo 和Las Vegas算法。资源里有做好的KMP, Monte Carlo 和Las Vegas算法代码以及2份算法报告。

    N皇后问题Las Vegas优化算法的实现

    ### N皇后问题Las Vegas优化算法的实现 #### 引言 N皇后问题是一个经典的计算机科学问题,涉及到在N×N的棋盘上放置N个皇后,使得任何两个皇后都不在同一行、同一列或同一对角线上。这个问题不仅具有数学上的趣味...

    算法分析与设计课件:随机算法.ppt

    随机算法可以分为几大类别,包括数值概率算法、Sherwood算法、Las Vegas算法和Monte Carlo算法。 数值概率算法主要用于数值问题的求解,它依赖于随机数生成来解决特定问题。计算机通常通过线性同余法来生成随机数,...

    2022年山东大学软件学院研究生随机算法

    本资源主要讲解了随机算法中的重要概念和技术,涵盖了随机算法的基础知识、随机算法的设计和分析、NP 完全性问题、Monte Carlo 算法和 Las Vegas 算法、延迟决策原理、马尔科夫不等式、条件期望方法、奖券收集问题和...

    KMP, Monte Carlo 和Las Vegas算法程序类

    东南大学计算机系的课程中,学生们会接触到多种算法,包括KMP字符串匹配算法、Monte Carlo算法和Las Vegas算法。这三种算法在数据结构(DS)的教学中占据着重要地位,因为它们涉及到不同的问题解决策略和复杂度分析...

    随机算法 randomized algorithm

    - **Las Vegas方法**:这类算法虽然运行时间不确定,但最终一定能得出正确答案,只是所需时间可能在一定的概率分布下变化。 - **舍弃法**:如果算法在某次迭代中得到不理想的结果,可以抛弃并重新开始,直到满足某个...

    flash字幕-swishmax4_for_vegas

    标题中的“flash字幕-swishmax4_for_vegas”指的是使用SwishMax 4软件创建的Flash字幕,专门用于Vegas视频编辑软件。SwishMax 4是一款强大的动画制作工具,用户可以利用它轻松创建交互式的Flash内容,包括动态字幕。...

    概率算法Monte Carllas Vegas Sherwood

    Las Vegas算法与Monte Carlo算法类似,也使用随机性,但其关键区别在于Las Vegas算法保证最终能找到正确解,只是所需的时间是随机的。该算法通常用于寻找最短路径、图的遍历等问题。如果运气好,算法可能在很短时间...

    概率算法--降低算法的复杂度

    2. **拉斯维加斯算法**(Las Vegas Algorithms):这类算法保证了结果的准确性,但运行时间是随机的。也就是说,虽然结果一定是正确的,但运行时间可能是不确定的。 3. **谢伍德算法**(Sherwood Algorithms):这类...

    随机算法 Rajeev Motwani,

    随机算法可以分为两大类:Las Vegas算法和Monte Carlo算法。Las Vegas算法总是给出正确结果,但运行时间不确定;Monte Carlo算法运行时间固定,但结果的正确性有一定的概率保证。 2. 计算模型与复杂度类别:随机...

    las-vegas.zip

    "las-vegas.zip"这个压缩包显然包含了与拉斯维加斯相关的CAD设计数据,这为我们提供了一个深入了解这座全球知名城市的建筑设计和城市规划的机会。 首先,我们注意到压缩包内的"las-vegas.dxf"文件,这是一个CAD数据...

    随机算法实现N皇后问题

    随机算法实现N皇后问题,所用随机算法是Las Vegas随机算法

    随机算法以及素数生成实验报告附代码

    与Monte Carlo算法类似,Las Vegas算法也使用随机性,但不同的是,它在成功时总是能得出正确结果,只是成功所需的平均运行时间取决于随机性。在本实验中,Las Vegas算法被用来进一步确认由Monte Carlo算法得出的可能...

    北航-研究生算法-作业和复习整体资料

    6. **概率算法和随机化**:如Monte Carlo方法、Las Vegas方法,用于处理NP难问题或提高算法效率。 7. **计算几何**:涉及平面几何中的算法,如最近点对问题、多边形求交等。 8. **字符串处理**:KMP、Boyer-Moore...

Global site tag (gtag.js) - Google Analytics