Project Euler 11解题报告
Project Euler 10解题报告
题目:
The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.
Find the sum of all the primes below two million.
中文题目:
10以下的质数的和是2 + 3 + 5 + 7 = 17.
找出两百万以下所有质数的和。
解题分析: 前面有个题目已经有了好的处理素数的方式,这次直接用前面的代码来实现。
limit = 1000000 arr = [True] * limit def sieve(x): global arr,limit for i in range(x*2,limit,x): arr[i] = False map(sieve, range(2,limit**1/2)) primes = [] for i in range(2,limit): if arr[i]: primes.append(i) sum = 0 for p in primes: sum += p print sum
Project Euler 9解题报告
project euler 7解题报告
Project Euler 3解题报告
What is the largest prime factor of the number 600851475143 ?
题目3:找出一个合数的最大质数因子
13195的质数因子有5,7,13和29.
600851475143的最大质数因子是多少?
<a href="http://projecteuler.net/problem=3" target="_blank">Project Euler problem 3</a>
版本一:
先找出素数,然后确定最大的素因数。时间大概为37秒左右,属于很自然的但是效率很低的方法
import time, math
def findprimefactor(maxnum):
primefactor=[2,3,5,7]
i=9
while i flag=True
q=int(math.sqrt(i))
k=0
while(primefactor[k] p=primefactor[k]
if not(i%p):
flag=True
break
else:
flag=False
k+=1
if not flag:
primefactor.append(i)
i+=2
return primefactor
if __name__=='__main__':
strart=time.time()
L=findprimefactor(775147)
for num in L[::-1]:
if 600851475143%num==0:
print num
break
else:
print 600851475143
print time.time()-strart
版本二:
这个方法是利用除2外所有的素因数都是奇数的特点来完成,简单而且效率很高,时间为0.002秒
import time
strart=time.time()
d, n = 3, 600851475143
while (d * d &lt; n):
if n % d == 0:
n /= d
else: d += 2
print n
print time.time()-strart
Project Euler 4解题报告
Project Euler 2解题报告
斐波那契数列中的每一项被定义为前两项之和。从1和2开始,斐波那契数列的前十项为:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
考虑斐波那契数列中数值不超过4百万的项,找出这些项中偶数项之和。
Project Euler Problem 2 代码:
a=[1,2,3,5,8,13,21,34,55,89]
while a[-1]+a[-2]<4000000:
a.append(a[-1]+a[-2])
sum([i for i in a if not i%2])
Project Euler 1解题报告
10以下的自然数中,属于3和5的倍数的有3,5,6和9,它们之和是23.
找出1000以下的自然数中,属于3和5的倍数的数字之和。
project euler problem 1:
代码:
sum(list(set([i for i in range(1000) if not i%3 or not i%5 ])))
Project Euler 8解题报告
Find the greatest product of five consecutive digits in the 1000-digit number.
中文题目:找出以下这个1000位的整数中连续5个数字的最大乘积。
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
分析:
from string import whitespace from operator import mul data = open('/tmp/data') # Number pasted to file. nos = [int(c) for line in data for c in line if c not in whitespace] print max([reduce(mul, nos[i:i+5]) for i in range(len(nos)-5)])