0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Output練習のためProjectEulerを解いてみる #3

Posted at

Output練習のためProjectEulerを解いてみる第3問目です。
それでは解いていきます。

#3 Largest Prime Factor

The prime factors of $13195$ are $5, 7, 13$ and $29$.

What is the largest prime factor of the number $600851475143$?

意訳

13195の素因数は5,7,13,29である。
600851475143の最も大きい素因数は何か?

方針

ある数の素因数を求めるということなので、1~Nまでの素数をエラトステネスの篩で求めてあげて、600851475143を素数で割って素因数を求めました。

解法1

ProjectEuler_3.py
N = 600851475143
def divisor_generate(NUM):
    divisor = {n for n in range(2, NUM + 1)}
    for i in range(2, int(NUM**0.5)+1):
        for j in range(2*i, NUM+1, i):
            divisor.discard(j)
    return divisor

divisor = divisor_generate(int(N**0.5))
factor = []
for d in divisor:
    if N % d == 0:
        factor.append(d)
print(max(factor))

これを解くと4613732が得られる。
ここで使っているテクニックとして、集合の要素を削除するときに、discardを使うことでない数字が代入されてもエラーを起こさないようにしています。また、今回は素数で一回割れたらfactorに挿入する方法をとっているので、$600851475143 = a^2 \times b \times c^4 ...$という可能性もありましたが、求められているものは最も大きい素因数なので、あえて除外しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?