python,求约数,开方法

def 约数(n):
    if n<=3:return [1,n]
    m=int(n**0.5) #这里之前有个取整除的运算,后来发现int默认就是截断操作
    y=[]
    for i in range(1,m+1):
        if n%i==0:
            y.append(i)
            y.append(int(n/i))
    return set(y)
约数(100000)

35.1 µs ± 1.18 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

以上代码可以再优化一点点,例如开方后正好又是个整数呢

截取自我的啃书随笔,python - 啃书 第五章 函数
以下是失败历程,大佬还有更好的方法,很数学的那种,但我看不懂!

高效率求约数的个数

这里我想到一个问题,如何优化求约数的步骤,例如,如果一个数无法成为2的倍数,自然也就无法成为偶数的倍数,同理,无法成为3的倍数,就无法成为3的倍数的倍数,于是,待求约数的集合就是1~该数,每一个质数无法称为约数的话,其倍数也无法成为约数,此时就使用集合的处理方法,将他的倍数从待求约数中去除,那先写一个代码来获取随一些数的约数,看下结果,验证下想法。

import random
while 1:
    inputs=input("回车:随机数;数字回车:输入数;eixt回车:退出")
    if inputs=="exit":break
    elif inputs.isalnum():r=int(inputs)
    else:r=random.randint(1,100)
    约数=[]
    质数=[]
    print(str(r)+"的开方是:"+str(r**0.5))
    for i in range(1,r+1):
        if r%i==0:约数.append(i)
    print(str(r)+"的所有约数:"+str(约数))
    for i in range(2,r+1):
        c=0
        for j in range

你可能感兴趣的:(python)