对于一个大于1的正数,有些可以写成,1个或者多个连续素数和的形式,比如41,
41=2+3+5+7+11+13
41=11+13+17
41=41
41有三种形式。
输入:大于1的正数int N
输出:素数和的组数 int n
# 判断素数
def is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(number**(0.5) + 1), 2):
if number % current == 0:
return False
return True
return False
# 获得素数列表
def get_prime(n=10000):
prime_ls = []
for i in range(n):
if is_prime(i):
prime_ls.append(i)
return prime_ls
def sol(n):
prime_ls = get_prime()
length = len(prime_ls)
count = 0
i = 0
while prime_ls[i] <= n:
mysum = 0
for j in range(i, length):
mysum += prime_ls[j]
if mysum >= n:
break
if mysum == n:
count += 1
i += 1
return count
# Test
for i in [10,2,3,17,41,20,666,12,53]:
print(sol(i))
输出:
1
1
1
2
3
0
0
1
2