Python计算Project Euler Problem 3
2015-09-01 09:36
691 查看
最近学Python,于是就拿Project Euler里面的题来练手,以下是第三题:
The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ?
既然是求质因子,首先想到的思路就是先求出来因子,再判断是不是质数,代码如下:
结果运行出来也正常,如下:
心里很欢喜,至少思路没错,后来把num改成600851475143,这下傻眼了。出错了?
Traceback (most recent call last):
File "f:\python\pe3.py", line 7, in <module>
for i in range(1, num):
OverflowError: range() result has too many items
言而总之,总而言之,就是range()这个数太大……在stackoverflow上也看到有人出了同样的问题,链接:http://stackoverflow.com/questions/10778764/python-overflowerror
后来看中了这个写的最短的,因为他的思路才是更优的!思路:一个数总能被拆成最小部分(也就是质因子),多个质因子相乘(质数就是1和本身相乘),例如:168 = 2×2×3×3×7,从2开始循环,一直到2不能被整除,2为A的一个质因子,这样A就变为42,再n到3,能整除,3也是A的一个质因子,如此A变为7,循环到4,我们知道,是肯定不可以被4整除的(因为2都已经不能整除),所以知道,后面的能被整除的一定是个质数,因为合数都已被整除掉(例如2×3这样的合数),代码如下:
运行结果:
这么大的数立马出结果。看来算法和思维才是关键!
The prime factors of 13195 are 5, 7, 13 and 29.What is the largest prime factor of the number 600851475143 ?
既然是求质因子,首先想到的思路就是先求出来因子,再判断是不是质数,代码如下:
num = 13195 res = [] for i in range(1, num): if(num%i == 0): k = 0 for j in range(1, i): if(i%j == 0): k +=1 if(k == 1): res.append(i) print res
结果运行出来也正常,如下:
心里很欢喜,至少思路没错,后来把num改成600851475143,这下傻眼了。出错了?
Traceback (most recent call last):
File "f:\python\pe3.py", line 7, in <module>
for i in range(1, num):
OverflowError: range() result has too many items
言而总之,总而言之,就是range()这个数太大……在stackoverflow上也看到有人出了同样的问题,链接:http://stackoverflow.com/questions/10778764/python-overflowerror
后来看中了这个写的最短的,因为他的思路才是更优的!思路:一个数总能被拆成最小部分(也就是质因子),多个质因子相乘(质数就是1和本身相乘),例如:168 = 2×2×3×3×7,从2开始循环,一直到2不能被整除,2为A的一个质因子,这样A就变为42,再n到3,能整除,3也是A的一个质因子,如此A变为7,循环到4,我们知道,是肯定不可以被4整除的(因为2都已经不能整除),所以知道,后面的能被整除的一定是个质数,因为合数都已被整除掉(例如2×3这样的合数),代码如下:
import time start = time.clock() A = 600851475143 n = 2 fac = [] while(n<=int(A)): B=1 while(A%n==0): B=0 A=A/n if(B==0): fac.append(n) n=n+1 print fac print max(fac) end = time.clock() print end-start
运行结果:
这么大的数立马出结果。看来算法和思维才是关键!
相关文章推荐
- Ubuntu Python 环境配置
- python django 数据库查询方法总结
- 【Python学习日记】 第 b1fd 一天
- Python模拟登陆大连交通大学教务在线
- python2 与 python3 语法区别
- python setup.py安装出错: error: Unable to find vcvarsall.bat
- python学习笔记01--链表的实现
- windows中Python2.x和Python3.x之间的切换
- python排序之sort,sorted用法
- python核心编程学习笔记-(第1天)-运行python
- Python-BlogServer博客-C调用Python的wsgi接口
- 64位Win7下安装并配置Python2.7机器学习环境
- python中date、datetime、string的相互转换
- Python中文编码问题
- Python单元测试框架之pytest -- 断言
- 第0014道练习题_Python写Excel文件(openpyxl库)
- 【python】使用unix管道pipe处理stdout实时数据
- 【python】使用unix管道pipe处理stdout实时数据
- python爬虫备忘 31.8
- 零基础学python-10.4 打印