提示用户从键盘上输入一个1-1000的数,输出这个数的所有因子。(提示,用穷举法,从1依次开始试每个自然数是否是其因子,试到其一半即可)
不用到一半,到根号就可以了
num = int(input('num: '))
print([(m, num // m) for m in range(1, int(num ** 0.5) + 1) if not num % m])
一个正整数N的因子一定是成对出现的,即 N = a * b (其中a, b都属于正整数集合,且一定满足a<= sqrt(N) <=b)
知道了上面的原理,我们就知道在穷举遍历时没有必要试到一半,只需要从1到sqrt(N)即可。用列表推导式一行代码就搞定:
import math
N = int(input("num: "))
print([(a, N // a) for a in range(1, int(math.sqrt(N)) + 1) if not N % a])
注意:不推荐用 ** 运算符+小数进行开方操作,不安全。math模块的sqrt()专门用于开方,效能更好还安全。