鱼C论坛

 找回密码
 立即注册
查看: 6414|回复: 4

[已解决]欧拉计划-合数的最大质因子-求解惑

[复制链接]
发表于 2017-8-4 12:09:57 | 显示全部楼层 |阅读模式

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

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

x
我的方案是
  1. #计算一个合数的最大质因子
  2. import time

  3. number = int(input('请输入要求最大质因子的数字:'))
  4. start = time.clock()

  5. def prime(param):
  6.     '判断是否是质数'
  7.     if param < 3:
  8.         return 1
  9.     for i in range(3,param-1):
  10.         if param%i == 0:
  11.             return 0
  12.     return 1

  13. '''质因子从该数字number的中间处开始判断
  14.     -只判断奇数数字 每次递减2
  15.     -先判断是因子、再判断是质数
  16.     -满足条件即是所需的最大质因子
  17. '''
  18. factor = number // 2
  19. if factor%2 ==0:
  20.     factor = factor + 1
  21. while 1:
  22.     if number%factor ==0:
  23.         if prime(factor):
  24.             print('%d的最大质因子是%d'%(number, factor))
  25.             break
  26.     factor -= 2


  27. end = time.clock()
  28. print('耗时:%f'%(end - start))
复制代码


--计算9位数耗时就有3s
--看了其他鱼友的代码发现他们先对合数进行开方,在平方根的范围内判断
求解为什么要先开方。。。。。。。。。
最佳答案
2017-8-4 17:22:37
本帖最后由 ba21 于 2017-8-4 17:28 编辑
运维小书童 发表于 2017-8-4 16:39
感谢版主的回答!
那如果要判断的数字是:95
95的最大质因子是 :19


查了下资料:
因为如果一个数不是素数是合数,
那么一定可以由两个自然数相乘得到,
其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。

所以 开出来的根 得到的是一个小于或等于它的平方根的数 然后根据这个计算出最大质因子
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-8-4 15:33:44 | 显示全部楼层
本帖最后由 ba21 于 2017-8-4 17:29 编辑

假设:

请输入要求最大质因子的数字:99
99的最大质因子是11
---------------------------------------------
11 * 11 =121要比99大了。先开方就能最快的判断出最大质因子数。 得到的是一个小于或等于它的平方根的数 然后根据这个计算出最大质因子
====================================================
请输入要求最大质因子的数字:98
98的最大质因子是7(2*7*7 = 98)
-----------------------------------------------------
98开方后约为10, 10*10=100 比98大了。 得到的是一个小于或等于它的平方根的数 然后根据这个计算出最大质因子

评分

参与人数 1荣誉 +2 鱼币 +1 收起 理由
运维小书童 + 2 + 1

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-4 16:39:10 | 显示全部楼层
ba21 发表于 2017-8-4 15:33
假设:

请输入要求最大质因子的数字:99

感谢版主的回答!
那如果要判断的数字是:95
95的最大质因子是 :19
19就要比95的平方根大了 这种情况就出错了。
还是判断的数字有什么特殊情况需要考虑吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 16:58:13 | 显示全部楼层
运维小书童 发表于 2017-8-4 16:39
感谢版主的回答!
那如果要判断的数字是:95
95的最大质因子是 :19

应该这样理解,如果没有平方根之内的因子,就不可以有更大的因子。以95为例,如果没有10以内的因子5,就不可能有19.所以判断到平方根就可以了。

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
运维小书童 + 1 + 1 + 1 谢谢 理解了

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-4 17:22:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 ba21 于 2017-8-4 17:28 编辑
运维小书童 发表于 2017-8-4 16:39
感谢版主的回答!
那如果要判断的数字是:95
95的最大质因子是 :19


查了下资料:
因为如果一个数不是素数是合数,
那么一定可以由两个自然数相乘得到,
其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。

所以 开出来的根 得到的是一个小于或等于它的平方根的数 然后根据这个计算出最大质因子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 10:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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