nの素因数分解を見つけるプログラムを書こうとしています!。私は以前にこれを成功させましたが、すでに書いたコードが見つからないので、書き直さなければなりません!:pここにコードがあります:
import math
import numpy as np
import itertools as it
import operator as op
def primes(n):
"""A simple sieve to find the primes less than n"""
nums = np.arange(3,n+1,2)
sqrtn = int(n**0.5)/2
for step in nums[:sqrtn]:
if step:
nums[step*step/2-1::step]=0
return [2] + map(int, filter(None, nums))
def factFactors(n):
"""Finds the prime factorization of n! using the property found
here: http://en.wikipedia.org/wiki/Factorial#Number_theory"""
ps = primes(n)
for p in ps:
e = 0
for i in it.count(1):
epeice = n/(p**i)
if epeice == 0: break
e += epeice
yield p, e
if __name__=="__main__":
x = list(factFactors(100))
print x, reduce(op.mul, [p**e for p, e in x], 1)==math.factorial(100)
出力は次のとおりです。
[(2, 97), (3, 48), (5, 24), (7, 16), (11, 9), (13, 7), (17, 5), (19, 5), (23, 4), (29, 3), (31, 3), (37, 2), (41, 2), (43, 2), (47, 2), (53, 1), (59, 1), (6
1, 1), (67, 1), (71, 1), (73, 1), (79, 1), (83, 1), (89, 1), (97, 1)] False
私はこれを何時間も見てきましたが、何が悪いのかわかりません...