私の以下の方法は、スーパークーパーとスーパークーパーです。最適化に関する提案に関するヒント。私は2つの異なる素数のセミプライムについて知っていますが、その数はセミプライムの半分以下です。しかし、素数のリストを大量に効率的にチェックする方法についてはわかりません。 nが13桁の場合は、鉱山が崩壊すると大きくなります。セミプライムファクタリングアルゴリズムを最適化
import math
def eratosthenes(n):
multiples = set()
primes = set()
for i in range(2, n+1):
if i not in multiples:
if i <= math.ceil(math.sqrt(n)+10):
primes.add(i)
for j in range(i*i, n+1, i):
multiples.add(j)
result = []
for p in primes:
while n % p == 0: # while p divide n...
result.append(p)
n = n // p
if n <= 1:
break
インデントエラーと 'return result'行だけでなく、期待通りの結果が得られます。徹底的なレビューについては、[コードレビュー](https://codereview.stackexchange.com/)でお問い合わせください。直ちに改善するには、 'sqrt(n)'をループから取り出して一度だけ実行してください。また、この機能を複数回使用したい場合は、エラトステンのふるいをキャッシュすることができます。 –
_n_の大きさはどれくらいですか? _n_のサイズが異なると、異なるアルゴリズムが必要になります。 – user448810
Nは5983391455009以上です –