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

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

阅读更多

 

'''
Created on 2012-3-10

@author: daweibalong
'''

from random import randint

f=[]

def gcd(m,n):
    if n>0:
        return gcd(n,m%n)
    return m

def isPrime(n):
    if n<2:
        return True
    for i in range(2,int(n**0.5)+1):
        if n%i==0:
            return False
    return True

def ifenough(num):
    m=1
    for i in f:
        m*=i
    if m==num:
        return 0
    if m>num:
        return 1
    return 2

def PollardRho(num,n):
    if(isPrime(n)):
        f.append(n)        
        return;
    x=[]
    i=1    
    x.append(-1)
    x.append(randint(1,n))
        
    y=x[1]
    k=2
    while True:
        i+=1   
        x.append((abs(x[i-1]*x[i-1]-1))%n)
                
        d=gcd(abs(y-x[i]),n)

        if d>1 and d<n:   
            PollardRho(num,d)    
            PollardRho(num,n/d)
        
        if i==k:
            y=x[i]
            k=2*k
        
        if x.index(x[i],0,i+1)!=i or ifenough(num)==0 or ifenough(num)==1:
            break      
        
def repeat(n):
    while True:
        f[:]=[]
        PollardRho(n,n)
        if ifenough(n)==0:
            f.sort(cmp=None, key=None, reverse=False)
            for index,j in enumerate(f):
                if index!=len(f)-1:
                    print j,'*',
                else:
                    print j
            break

if __name__=='__main__':
    print 'please enter the number you want to divide:',
    n=int(raw_input())
    repeat(n) 
 
分享到:
评论

相关推荐

    skybox对地凝视-Las Vegas

    【标题】"skybox对地凝视-Las Vegas"揭示了一项高级的远程监控技术,它利用了Skybox系统对拉斯维加斯地区特定公路的实时观察。这项技术结合了高清卫星成像与智能分析算法,能够捕捉并解析地面上的动态情况。 【描述...

    高级算法-随机算法

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

    las.zip_LAS算法语义_Las Vegas

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

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

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

    KMP, Monte Carlo ,Las Vegas算法

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

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

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

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

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

    随机算法 randomized algorithm

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

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

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

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

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

    随机算法 Rajeev Motwani,

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

    概率算法Monte Carllas Vegas Sherwood

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

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

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

    算法-第四版

    8. **随机化算法**:随机化算法在现代计算中扮演着重要角色,书中介绍了如随机化排序、Monte Carlo算法和Las Vegas算法等,展示了它们在解决复杂问题时的优势。 9. **计算几何**:计算几何部分探讨了点、线、圆等...

    随机算法实现N皇后问题

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

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

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

    随机算法与回溯法相结合求八皇后问题

    Las Vegas算法是一种特殊的随机算法,它在解决问题时,如果找到一个解就会停止,而不会无休止地搜索。在八皇后问题中,Las Vegas算法可能会更快地找到一个解,因为它不是盲目地遍历所有可能的布局,而是尝试一种随机...

Global site tag (gtag.js) - Google Analytics