zoukankan      html  css  js  c++  java
  • 欧拉计划 | Project Euler 第三题的做法

    首先,题目来自欧拉计划(Project Euler),也感谢这个中文版

    其次,题目中文版如下:

    题目3:找出一个合数的最大质数因子


    13195的质数因子有5,7,13和29.

    600851475143的最大质数因子是多少?

    因为刚做了素因子的习题,所以直接就用了里面的函数,但问题出现了,跑了半天都没结果,我才开始考虑性能方面的因素。只是简单优化了判断素数的函数,但并没有实质性变化。今天忽然在飞林沙博客上发现了他对这道题的算法,本来以为连素数判断都没有,不会正确,但后来试了试,竟然很快就出结果了,而且答案正确。下面是具体代码以及我的注释:

    #coding=utf-8
    def getList(n):
         result = [] #定义空列表
         count = 3 #从3开始遍历,因为2单独判断
         max = n #max为初始数值
         while max%2 == 0: #以2作判断,如果能被2整除,则2加入列表,max除以2——把里面的2全部除完
             max /= 2
             result.append(2)
    
         while count <= max: #以max大于count开始循环
             if max%count == 0: #如果max能被count整除,把count加入列表,max除以count,跟上面对2的判断类似 —— 并且一旦能整出,则把count除尽
                 result.append(count)
                 max /= count
             else:
                 count += 2 #因为2已经除完,所以排除偶数
         return result
    
    print getList(54) #得到所有素因数

    因为遇到能整除的就一直除,直到除尽,所以所有的都是素数,只是会有重复,但结果并不影响最大值的判断。

    而且因为max一直在缩小,所以遍历的次数越来越少,并不像我之前的算法,需要所有的数值都遍历一遍。

  • 相关阅读:
    AcWing 2476. 树套树(线段树套splay)
    LeetCode 1191 K 次串联后最大子数组之和
    LeetCode 668 乘法表中第k小的数
    Java003-String字符串
    云原生CD工具spinnaker部署(容器化灰度发布)
    刷题日记
    8.22 校内模拟赛 题解报告
    关于 CDQ分治(复习)
    解题营_数论
    解题营_动规
  • 原文地址:https://www.cnblogs.com/alexkh/p/2835476.html
Copyright © 2011-2022 走看看