projecteuler.net 題目筆記 [1-5]

題目1:找出1000如下天然數中3和5的倍數之和。

10如下的天然數中,屬於3和5的倍數的有3,5,6和9,它們之和是23.php

找出1000如下的天然數中,屬於3和5的倍數的數字之和。python

s=0
for i in range(1000):
    if i%3 == 0 or i%5 ==0:
        s += i
print s

>>> 算法

233168oop



題目2:在斐波那契數列中,找出4百萬如下的項中值爲偶數的項之和。

斐波那契數列中的每一項被定義爲前兩項之和。從1和2開始,斐波那契數列的前十項爲:spa

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...code

考慮斐波那契數列中數值不超過4百萬的項,找出這些項中值爲偶數的項之和。orm

fnList=[1,2]    # 初始化
fnSum=2         # 求偶數項的和
flag=0          # 在fnList0,1位置不斷切換
while True:
    fnList[flag] = sum(fnList)
    if fnList[flag] > 4000000:
        break
    if fnList[flag] %2 == 0:
        fnSum += fnList[flag]
    flag=abs(1-flag)
print fnSum

>>> 
get

4613732it

一句話:
class

print sum([i for i in range(1000) if i%3==0 or i%5==0])



題目3:找出一個合數的最大質數因子

13195的質數因子有5,7,13和29.

600851475143的最大質數因子是多少?

什麼是質數因子,素數 沒搞懂. 略過



題目4:找出由兩個三位數乘積構成的迴文。

一個迴文數指的是從左向右和從右向左讀都同樣的數字。

最大的由兩個兩位數乘積構成的迴文數是9009 = 91 * 99.

找出最大的有由個三位數乘積構成的迴文數。

def loop(n):
    res = [0]*3
    for i in range(n):
        for j in range(n):
            mul = i*j
            if str(mul) == str(mul)[::-1]:
                if mul > res[2]:
                    res[0],res[1],res[2] = i,j,mul
    return res
print loop(100)

>>> 

[913, 993, 906609]



題目5:找出最小的能被1-20中每一個數整除的數。

2520是最小的能被1-10中每一個數字整除的正整數。

最小的能被1-20中每一個數整除的正整數是多少?

def loop(a,b):
    # 這算法真TNND爛. 
    if a>b:a,b=b,a
    ss = 1
    while True:
        if map(lambda x:ss%x==0, range(a,b+1)) == [True]*(b-a+1):
            break
        ss += 1
    return ss
print loop(1,20)

這算法沒法直視, 仍是待用最小公倍數方法

相關文章
相關標籤/搜索