python找因子_Python:如何找到一个非常大的数的素因子?[复制]

为了获得正确的输出,我对github实现做了一些更改,如下所示。

list(range(n+1))

2.我成功了

int(n/i-i)

import math

# return a dict or a list of primes up to N

# create full prime sieve for N=10^6 in 1 sec

def prime_sieve(n, output={}):

nroot = int(math.sqrt(n))

sieve = list(range(n+1))

sieve[1] = 0

for i in range(2, nroot+1):

if sieve[i] != 0:

m = int(n/i - i)

sieve[i*i: n+1:i] = [0] * (m+1)

if type(output) == dict:

pmap = {}

for x in sieve:

if x != 0:

pmap[x] = True

return pmap

elif type(output) == list:

return [x for x in sieve if x != 0]

else:

return None

primelist=None

def get_prime_factors(n, primelist=None):

if primelist is None:

primelist = prime_sieve(n,output=[])

fs = []

for p in primelist:

count = 0

while n % p == 0:

n /= p

count += 1

if count > 0:

fs.append((p, count))

return fs

现在,如果你尝试:

print(get_prime_factors(140))

得到正确的输出:

[(2, 2), (5, 1), (7, 1)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值