合数分解成质数之和
N是一个合数,求出其最多由多少个[un]最小[/un]不同质数和组成,并要求按小到大输出这些质数。我自己弄了个程序,但是存在些问题(程序中说明处),各位看看怎么改才好。
如果有更好的程序,那就更好了。
对N=2008:
#include "stdio.h"
int ISzhishu(int num){
int i;
if(num==2)
return 1;
if(num==1)
return 0;
for(i=2;i<=num-1;i++)
{
if(num%i==0)
return 0;
}
return 1;
}
main()
{
int i;
int sum=0;
int temp;
int flag=1;
int a[200];
for(i=1;i<200;i++)
a[i]=-1;
i=1;
while(sum<2008)
{
if(ISzhishu(i)==1)
{
sum+=i;
a[i]=1;
}
i++;
}
sum-=2008;
temp=sum;
while(flag==1)
{
while(ISzhishu(temp)==0)
{
temp--;
}
a[temp]=-1;
if(sum>temp )
//此处即存在问题,即可能最后会使sum =1;temp =0,成了死循环
{
temp=sum-temp;
sum=temp;
}
else if(sum==temp )
{
flag=0;
}
}
sum = 0;
for(i=1;i<200;i++)
{
if(a[i]==1)
{
sum += i;
printf("%d ",i);
}
}printf(" sum=%d", sum);
}