1、2是最小的素数,所以与素数数相关的编程,下标一般从2开始
2、任何一个正整数字都可以表示多个素数因子的和,如果从小到大进行因子分解,则最后剩下的就是最大素数因子
3、如果需要遍历一个数字n的因子或者加数,则一般不需要遍历全集。例如,对于加数而言,遍历范围可以是range(int(n/2)), 对于因子而言,遍历范围可以是range(int(math.sqrt(n)) + 1)
判断一个数是否为素数,计算最大素数因子。参考代码如下:
import math
def is_prime(n):
if n < 2:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
def get_max_prime_devisor(n):
if n < 2:
return -1
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
n = int(n / i)
return get_max_prime_devisor(n)
return n
for i in range(10):
print(i, is_prime(i), get_max_prime_devisor(i))
测试结果:
0 False -1
1 False -1
2 True 2
3 True 3
4 False 2
5 True 5
6 False 3
7 True 7
8 False 2
9 False 3