Project Euler Problem1~10(Python)

自分なりの解答と考え方を載せていきます。

少し雑なのでコメントしてくれれば詳しく載せます。

ミスやアドバイスもコメントお願いします!!

 

Problem1「3と5の倍数」

  1<n<1000で3,5の倍数を足して、3,5の共通公倍数である15の倍数を引く。

f:id:hotori_0211:20220324235237p:plain

答え 233168

Problem 2 「偶数のフィボナッチ数」 

  フィボナッチ数の問題です。自然を表す数列いわれたり、整数の数列なのに一般項に無理数があったり色々不思議な数列です。

まずは項の値が400万以下のフィボナッチ数列を出し、そのうえで2で割れる値を足していきます。

f:id:hotori_0211:20220325001019p:plain

答え 4613732

Problem 3 「最大の素因数」 

① 力任せに2から割っていく。

f:id:hotori_0211:20220325001853p:plain

今回は計算量が少なく結果がすぐ出るが、forの末端など工夫するところは大有り。

ちなみにこのコードでは素因数が1つしかなくその素因数が3乗以上の時結果が誤って出る。。

答え 6857

Problem 4 「最大の回文積」

① forで3桁×3桁をして結果を文字列に入れそれを反転しても同じだったら良い

f:id:hotori_0211:20220325002521p:plain

答え 906609

Problem 5 「最小の倍数」

① まずは1から20までの中の素数を出す。その次にその素数の累乗数を出す。

あとはそれらを全部かける。

関数Primecounterで2から√n+1の数までを割り、割り切れなかった場合素数としてTrueを返しています。n-1まで割るのではなく√n+1までにすることで計算量を減らしています。

f:id:hotori_0211:20220325005305p:plain

Answer:  232792560

Problem 6 「二乗和の差」

これは単純にforで二乗和と和を計算して、計算するだけですね。

Answer:  25164150

Problem 7 「10001番目の素数

problem5で作った素数カウンターを使い、10001番目の素数がきた時にforを終わらします。

Answer:  104743

Problem 8 「数字列中の最大の積」

まず数字を読み込みそれをいったん文字列にして一つずつ配列に入れていきます。

あとは配列を一個ずつづらして13個の連続する積の最大値を求めます。

正直問題の解き方より、数字の読み込み作業に戸惑いました(笑)

Answer:  23514624000

Problem 9 「特別なピタゴラス数」

二重forをつかいa,bに数値を代入していく、a,bを決めればcは1000-a-bと定義できるのであとはピタゴラ数になる組み合わせになるまで待つだけですね。

Answer:  31875000

Problem 10 「素数の和」

これもProblem5の関数を使いforで200万まで回していきます。

ただ時間がかかるので、これからも素数を使うと考えると素数の配列を作っていた方がよさそうですね(; ; )

Answer:  142913828922