JAVA算法:以最小成本分拆数字
给定一个整数n(n≥2),将该整数拆分为k个整数之和,即n=k1+k2+…+kn,其中每个元素都大于2;拆分成本计算为maxdiv(k1)+maxdiv(k2)+…+maxdiv(kn),其中maxdiv(x)是小于x的最大除数。
任务是以最小化成本的方式拆分数字,最后打印最小化成本。
例如:
给定整数:N = 6
输出结果: 2
6 可以表示为 3+3,最小成本cost是 1+1 = 2
给定整数: N = 5
输出结果: 1
5 不可拆分。
问题分析
当n是素数时,成本将是1,因为我们不需要分割n,n小于其本身的最大除数将是1。
如果n是奇数,n–2是质数,则n可以拆分为(2+质数),成本为1+1=2。
根据哥德巴赫的猜想,如果n是偶数,则成本为2,大于2的每一偶数都可以表示为两个素数之和,直到4^1018为止。
如果不满足上述所有条件,则n现在必须是奇数,如果从n中减去3,则它将变为偶数,可以表示为(3+偶数)=(3+素数+素数)&