分类 Project Euler 中的文章

Euler第四题

寻找一个最大的为两个3位数乘积的回文。

回文就是正着念,反着念相同的数或单词,如 9009 = 91×99。


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from time import clock
start=clock()
z=999
a=[0,0,0]
flag=False
for i in range(100000):
	a[0]=int(z/100)
	a[1]=int((z-100*a[0])/10)
	a[2]=int(z-100\*a[0]-10\*a[1])
	palindrome=100000\*a[0]+10000\*a[1]+1000\*a[2]+100\*a[2]+10*a[1]+a[0]

#print(palindrome)
product=999
for j in range(999):
	if palindrome/product<1000 and palindrome%product==0:
		print("the answer is {0}={1}".format(palindrome,product,int(palindrome/product)))
		flag=True
		break
	product=product-1
	z=z-1
	if flag==True or palindrome<0: 
		break
print("{0:5f}s".format(clock()-start))

这段代码执行结果大约需要0.057S。看了一下给出的答案,代码还可以优化一下。

……

阅读全文

Project Euler 第三题的一个nb算法

题目:求600851475143 的最大质因数。

搞了2,3个小时,搞出来的算法效率都很低。网上发现一个nb算法。改成python后如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
def maxPrime():
	n=600851475143
	d=2
	while d<n/d:
		if n%d==0:
			n=int(n/d)
		else:
			d=d+1
	return n

if __name__=="__main__":
	from time import clock
	start=clock()
	finish=clock()
	print("the largest prime factor is {0}\t\t{1}s".format(maxPrime(),(finish-start)/1000000))

结果: the largest prime factor is 6857 4.462223927783368e-13s

……

阅读全文