把任意可以分解的数分为不同的素数之和(不好分得会提示)----递归实现
#include "stdio.h"#include"stdlib.h"
int a[1000];
int b[1000]={1};
int j=0;
int b1;
int rem=1;
int pn()
{ int flag;
if(j>0&&rem)
b[j]=b[j-1];
rem=1;
b[j]=b[j]+1;
do
{ flag=0;
int flag1=0;
for(int i=1;i<=b[j];i++)
if(b[j]%i==0)
{
if(++flag1==3)
flag=1;
}
}while(b[j]++&&flag);
b[j]=b[j]-1;
return b[j];
}
int reduce(int s,int n)
{
if(s>0)
{
n=pn();
j++;
}
if(s==0)
return 1;
if(s<0)
{
j=j-2;
rem=0;
return 0;
}
if(s>b1||b[j]>b1)
{
printf("没有结果!");
exit(0);
}
if(reduce(s-n,n))
{
return 1;
}
return(reduce(s+b[j],b[j]));
}
int main()
{
scanf("%d",&b1);
reduce(b1,2);
for(int i=0;i<j;i++)
printf("%d ",b[i]);
return 0;
}
只是为了看看结果,代码很烂.....