质数拆分
将2019拆分为若干个两两不同的质数之和,一共有多少种不同的方法?注意交换顺序视为同一种方法,例如2+2017 =2019 与2017+2=2019视为同一种方法。
方法一
思路:
和01背包的思路一样只不过是以种数了统计结果,i为2019到2的质数,j就是2019的可能性。f[0][0]=1 因为本身也是一种可能。f[i][j]=f[i-1][j]这个是把f[i-1][j]这层传递下来然后f[i][j]+=f[i-1][j-z1[i]]是把[j-z1[i]]+f[i][j]上层结果加这层质数的可能数累计。
程序:
def z(a):
if a==2 or a==3:
return 1
if a%2==0:
return 0
p=1
while p*p<=a:
p+=2
if a%p==0:
return 0
return 1
z1=