project euler 1~10
1.This is Python
print(sum(i for i in range(1000) if i%5==0 or i%3==0))
2.加法的重复计算应该可以优化掉
fib_list = [1,2] while fib_list[-1]+fib_list[-2]<4000000: fib_list.append(fib_list[-1]+fib_list[-2]) print(sum(n for n in fib_list if n%2==0))
3.不知道是不是效率最高的方法,反正数字小,瞬间就出结果了
x = 600851475143 i = 2 while i<int(x**0.5): if x%i==0: x = x/i i +=1 print(x)
4.str(x)[-1::-1]什么的真是太方便了...不过python不能直接跳出多重循环,所以只能用标志位了...
is_found = False for x in range(999999, 100000, -1): if str(x)[-1::-1]!=str(x)[:]: continue else: for i in range(999, 100, -1): if x%i==0: if x/i>100 and x/i<999: is_found = True if is_found == True: break print(x)
5.Python3里面//代表floor除法,即向下取整
x = 1 l = [] for i in range(2,20): if x%i==0: continue else: r = i for j in l: if(r%j==0): r = r//j x *= r l.append(r) print(x)
6.This is python
print((sum(i for i in range(101)))**2-sum(i**2 for i in range(101)))
7.素数后面会反复用到,后面会把用筛数法写的取小于某值的所有素数的方法贴上来
primes = [2] is_prime = True for i in range(3, 2000000, 2): for j in primes: if j*j>i: primes.append(i) break if i%j==0: is_prime = False break; is_prime = True if len(primes)>10001: break print(primes[10000])
8.呃,这段代码写得好烂,直接转成str就可以分片什么的了,不用这么2的弄成list的,那时候还不会...
digits = r'7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450' digits_list = [] for i in range(len(digits)): digits_list.append(int(digits[i])) result = 0 index = 4 while index<len(digits)-4: p = 1 if int(digits[index])==0: index += 5 continue else: index += 1 for i in range(5): p *= digits_list[index-i] if p> result: result = p print(result)
9.按a<b<c
for a in range(1, 1000//2): for b in range(a, (1000-a)//2): c = 1000 - a - b if(a**2+b**2==c**2): print(a*b*c) break;
10.呃,稍后贴prime_sieve
import euler print(sum(euler.prime_sieve(2000000)))
浙公网安备 33010602011771号