//从Start开始,拆出为两个数,sum表示这两个数的和 public static void divide(int start, int m, int sum) { //如果两个数和为m,则为一种成功的拆分法 if (m == sum) { num++; } else { //从start开始,在m-sum之中任取一个数 for (int i = start; i <= m-sum; i++) { /* * 如果这个数是质数,继续拆分除去这个数之后的m, * 拆分完将sum返回原来值,继续下一个数的拆分 */
if (isPrime(i)) { sum += i; divide(i, m, sum); sum -= i; } } } } public static boolean isPrime(int number) { boolean flag = true; for (int i = 2; i <= Math.sqrt(number); i++) { if (number % i == 0) { flag = false; } } return flag; }} 这代码只能求出可分解的总数,不能打印每一个分解的数据 测试结果: m=8,输出3: 8=2+2+2+2 8=2+3+3 8=2+5m=9,输出4: 9=2+2+2+3 9=2+2+5 9=2+7 9=3+3+3m=12,输出7 12=2+2+2+2+2+2 12=2+2+2+3+3 12=2+2+3+5 12=2+3+7 12=2+5+5 12=3+3+3+3 12=5+7
if(num == 0) {
return;
}
for(int i = 0;i<num;i++) {
if(isPrime(i)) {
print("" + i + " + "+ f(num-i));
}
}
}
private boolean isPrime(int number) {
//检查number 是不是素数。
}
public class Main{
static int sum=0;
public boolean Prime(int n){
int flag=0,i;
if(n==2)flag=1;
for(i=2;i<n;i++){
if(n%i==0)
{
flag=0;break;
}
flag=1;
}
if((flag==1)&&(i>=n))return true;
else
return false;
}
public void Cal(int n){
if(n==0) sum=sum+1;
for(int i=0;i<=n;i++){
if(Prime(i))
{
n=n-i;
Cal(n);
}
}
}
public static void main(String args[]){
Main t=new Main();
t.Cal(8);
System.out.println(sum);
}
}
* 把一个正整数M拆分成几个质数的和,求一共多少种拆法
*/
public class NumberSplit {
//定义总共可以拆分的数量num
private static int num = 0; public static void main(String[] args) {
int m = 9;
int sum = 0;
divide(2, m, sum);
//如果m是质数,则需要减去一种
if(isPrime(m)){
num--;
}
System.out.printf("num=%d\n", num);
}
//从Start开始,拆出为两个数,sum表示这两个数的和
public static void divide(int start, int m, int sum) {
//如果两个数和为m,则为一种成功的拆分法
if (m == sum) {
num++;
} else {
//从start开始,在m-sum之中任取一个数
for (int i = start; i <= m-sum; i++) {
/*
* 如果这个数是质数,继续拆分除去这个数之后的m,
* 拆分完将sum返回原来值,继续下一个数的拆分
*/
if (isPrime(i)) {
sum += i;
divide(i, m, sum);
sum -= i;
}
}
}
} public static boolean isPrime(int number) {
boolean flag = true;
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
flag = false;
}
}
return flag;
}}
这代码只能求出可分解的总数,不能打印每一个分解的数据
测试结果:
m=8,输出3:
8=2+2+2+2
8=2+3+3
8=2+5m=9,输出4:
9=2+2+2+3
9=2+2+5
9=2+7
9=3+3+3m=12,输出7
12=2+2+2+2+2+2
12=2+2+2+3+3
12=2+2+3+5
12=2+3+7
12=2+5+5
12=3+3+3+3
12=5+7