python求一个数的因子_在Python中找到一个数字的所有因子的快速的方法是什么?...

下面是使用的代码。为了制作不同的plot,我修改了X = range(1,100,1)import timeit

from math import sqrt

from matplotlib.pyplot import plot, legend, show

def factors_1(n):

step = 2 if n%2 else 1

return set(reduce(list.__add__,

([i, n//i] for i in range(1, int(sqrt(n))+1, step) if n % i == 0)))

def factors_2(n):

return set(reduce(list.__add__,

([i, n//i] for i in range(1, int(sqrt(n)) + 1) if n % i == 0)))

X = range(1,100000,1000)

Y = []

for i in X:

f_1 = timeit.timeit('factors_1({})'.format(i), setup='from __main__ import factors_1', number=10000)

f_2 = timeit.timeit('factors_2({})'.format(i), setup='from __main__ import factors_2', number=10000)

Y.append(f_1/f_2)

plot(X,Y, label='Running time with/without parity check')

legend()

show()

X=range(1,100,1)1620

这里没有明显的差别,但数量更大,优势是显而易见的:

X=range(1,1000000,1000)(仅为奇数)1620

X=range(2,1000000,100)(仅为偶数)1620

X=range(1,1000000,1001)(奇偶交替)1620

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值