プロジェクトオイラー3番目の質問

タグ(スペースで区切っ):オイラーブログ


最大の素因数

13195の素因数5、7、13および29です。

番号600851475143の最大の素因数は何ですか?

質問の意味は13195 600 851 475 143最大の素因数を求め、29となっている5,7,13,29最大を持っている素因数の数の最大の素因数を見つけ、非常に簡単です。

最初の反応は、その後、最大の素数を見つける600851475143のすべての要因を、求めています。

ans = []
n = 600851475143
max = int(n**0.5)
for x in range(2, max):
    if n%x == 0:
        ans.append(x)

print(ans)

ans = [71, 839, 1471, 6857, 59569, 104441, 486847]

一般的な、スキルを加速一切要因を見つけていないが、プログラム上で、すでに非常に迅速に実行されているが、いくつかの加速技術がある裁判官は素数ではありません筛素数法

筛素数

倍数は、100未満求め素数として、素数を見つけるためにするとき、複数の素数は確かではない素数ので、私たちはそれを除外することができます。

n = 100
L = list(range(2, n))
ans = set()
while L:
    x = L.pop(0)
    ans.add(x)
    i = 2
    while i*x < n:
        if i*x in L:
            L.remove(i*x)
        i += 1
print(ans)
ans = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}

それは、我々は600 851 475 143の要因を見つけることができ、この考えに基づいて合成数を取り除くします

ans = []
n = 600851475143
iter_max = int(n ** 0.5)
for num in range(2,iter_max):
    if n%num == 0:
        ans.append(num)
        n/=num
        while n%num == 0:
            n/=num # 保证n已被num除尽,此时n不会再有num*i的因数
print(ans)
ans = [71, 839, 1471, 6857]

最終結果は6857です

おすすめ

転載: www.cnblogs.com/lepeCoder/p/10991575.html
おすすめ