我的是把任何数分解成不同的素数之和(如果不存在就提示不存在)
#include "stdio.h"
#include"stdlib.h"
int a[1000];
int b[1000]={3};
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;
for(int i=2;i<=b[j]-1;i++)
if(b[j]%i==0)
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,3);
for(int i=0;i<j;i++)
printf("%d ",b[i]);
return 0;
}