鱼C论坛

 找回密码
 立即注册
查看: 2369|回复: 1

欧拉计划第三题疑问

[复制链接]
发表于 2017-3-17 17:13:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求600851475143的最大质因数?

n=600851475143
a=2
while n!=a:
    if n%a==0:
        n=int(n/a)
    a+=1
    if n==a:
        print("最大质数为:",a)

结果为:6857

但是如果求20的最大质因数,为什么就不对了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-17 19:31:52 | 显示全部楼层
  1. import math


  2. #def is_prime(x):
  3. #    """ 判断x是否是质数 """
  4. #    x_sqrt = int(math.sqrt(x))
  5. #    for x_ in range(x_sqrt, 1, -1):
  6. #        if x % x_ == 0:
  7. #            return False
  8. #    return True
  9. #   
  10. #   
  11. #def get_factor(x):
  12. #    """ 获取x的质数因子 """
  13. #    if is_prime(x):
  14. #        return [x]
  15. #    x_sqrt = int(math.sqrt(x))
  16. #    for x_ in range(x_sqrt, 1, -1):
  17. #        if x % x_ == 0:
  18. #            tmp = get_factor(x_)
  19. #            tmp.extend(get_factor(int(x / x_)))
  20. #            return tmp


  21. def is_prime(x):
  22.     """ 判断x是否是质数 """
  23.     if x == 2:
  24.         return True
  25.     x_sqrt = int(math.sqrt(x))
  26.     l = [2]
  27.     l.extend(range(3, x_sqrt + 1, 2))
  28.     for i in l:
  29.         if x % i == 0:
  30.             return False
  31.     return True


  32. def get_factor(x):
  33.     """ 获取x的质数因子 """

  34.     def factor_div(xx):
  35.         """
  36.         递归求取xx的质数因子
  37.         若 xx = i * j,xx的质数因子是i和j的质数因子集合
  38.         """
  39.         if is_prime(xx):
  40.             factor.add(xx)
  41.             return factor
  42.         xx_sqrt = int(math.sqrt(xx))
  43.         for i in range(2, xx_sqrt + 1):
  44.             if xx % i == 0:
  45.                 if i not in factor:
  46.                     factor_div(i)
  47.                 j = int(xx / i)
  48.                 if j not in factor:
  49.                     factor_div(j)
  50.                 break
  51.         return factor

  52.     factor = set()
  53.     factor_div(x)
  54.     if x in factor:
  55.         factor.remove(x)
  56.     return factor


  57. print(max(get_factor(600851475143)))
复制代码


这样改
然后解释下你的,如果按照你的
n = 20
那么余数为0
不会输出任何东西
你的程序有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-25 21:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表