さえめろ の めも🐰

さえめろの備忘録です。twitter : @sae_mero_

Python3でproject euler

Python3の勉強をようやく開始。
手始めにもう解法がわかっているプロジェクトオイラーでもやってみます。(やりたいだけ)


#1「3と5の倍数」
10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.

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

if、forは()がいらない代わりに : をつけるっぽい。
for文はjsでいうfor in文の要領でrangeを使用する。xrangeってやつは廃止になったみたい。
参考:rangeとxrange - Python入門から応用までの学習サイト
print(xxx)で出力。
比較演算子はor and notとそのまま打てる。便利。



#2「偶数のフィボナッチ数」
フィボナッチ数列の項は前の2つの項の和である. 最初の2項を 1, 2 とすれば, 最初の10項は以下の通りである.
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
数列の項の値が400万以下の, 偶数値の項の総和を求めよ.

fib = [1,2]
total = 0
next = 0

while next < 4000000:
    next = sum(fib[-2:])
    fib.append(next)

for i in fib:
    if i % 2 == 0:
        total += i

print(total)

ary[]の中身の合計をsum(ary)で出せる。
今回使ったのはsum(ary[-2:])で後ろ二つの合計、ちなみにsum(ary[+2:])で前から二つの合計。便利すぎない?
ary.appendはary.pushと同じ操作。
参考:合計値の取得 (sum) - Python入門から応用までの学習サイト
要素の追加と連結(appendメソッド, extendメソッド) - リスト - Python入門



#3「最大の素因数」
13195 の素因数は 5, 7, 13, 29 である.
600851475143 の素因数のうち最大のものを求めよ.

x = 600851475143
i = 2
ary = []

while x>1:
    if x%i == 0:
        ary.append(i)
        x = x/i
    else:
        i += 1
result = max(ary)

print(result)

max(ary)でaryの最大値を出せる。min(ary)では最小値。
ary[A,B,C,D] だとmaxがDになるっぽい。



#4「最大の回文積」
左右どちらから読んでも同じ値になる数を回文数という. 2桁の数の積で表される回文数のうち, 最大のものは 9009 = 91 × 99 である.
では, 3桁の数の積で表される回文数の最大値を求めよ.

ary = []
for i in range(1000):
    for j in range(1000):
        text = str(i*j)
        reverse = text[::-1]
        if text == reverse:
            ary.append(i*j)
            
result = max(ary)
print(result)|

str(num)でnumをstring型に、text[::-1]でtextを反転できる。


#5「最小の倍数」
2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり, そのような数字の中では最小の値である.
では, 1 から 20 までの整数全てで割り切れる数字の中で最小の正の数はいくらになるか.

ary = []
total = 1
for i in range(2,20):
    flag = 1
    for j in range(2,i-1):
        if i%j == 0:
            flag = 0
    if flag == 1:
        ary.append(i)

y = 0
ary2 = []
for i in (2,ary):
    x = 20
    while x>1:
        y += 1
        x = math.floor(x/i)
        ary2.append(y)

print(ary2)

数学関数は大体JSと同じ(頭が小文字)

# coding: utf-8
# Here your code !
total1 = 0
total2 = 0
for i in range(101):
    total1 += i
    
    
total1 = total1*total1

for j in range(101):
    k = j*j
    total2 += k
    
print(total1-total2)