隆重感谢 moonwalker朋友 完成合数分解
非常感谢 moonwalker朋友 我一星期的努力终于出了成果(新手菜,大家勿笑)由于对这个问题 一直没有足够的自信 所以我的程序是当草稿写的 非常难看
由于还有是实验版本 我把所有情况都列出来了 并且貌似有很多BUG 能力有限
嘿嘿
#include <stdio.h>
static int a[50]={ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29,
31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97, 101, 103, 107, 109, 113,
127,131, 137, 139, 149, 151, 157, 163, 167, 173,
179,181, 191, 193, 197, 199, 211, 233, 227, 229,
};
int sushu(int n)
{
int i = 0;
for( i=2 ; i<n ; i++)
{
if (n%i == 0)
{
return(0);
}
}
if(i >= n)
{
return(1);
}
}
int Check2(int b[50])
{
int i;
int j;
for(i=0 ;i<50 ;i++)
{
for(j=i+1 ;j<50 ;j++)
{
if(b[i]==b[j] && b[i]!=0)
return(1);
}
}
if (i>=20)
return(0);
}
int Check3(int b[],int i)
{
int j;
for(j=0 ; j<50 ; j++)
{
if (i==b[j])
{
return(1);
}
}
if(j>=50)
return(0);
}
int main(void)
{
int n = 0;
int i = 0;
int j = 0;
int sum = 0;
void Check1(int n,int i);
int loop(int l,int k,int n,int i,int b[]);
printf("press a number please:\n");
loop: scanf("%d",&n);
if (sushu(n) || n<7)
{
printf("error input again please:\n");
goto loop;
}
for(i=0 ; i<50 ; i++)
{
sum+=a[i];
if (sum == n)
{
for(j=0 ; j<=i ; j++)
{
printf("%d,",a[j]);
}
printf("\npress any key to exit\n");
getch();
return(0);
}
if (sum > n)
{
n=n-(sum-a[i]);
Check1(n,i-1);
printf("press any key to exit\n");
getch();
return(0);
}
}
}
void Check1(int n,int i)
{
int l = 1;
int k = 0;
int b[50];
int j;
for(j=0;j<50;j++)
b[j]=0;
for(k=1 ; k<=i ; k++)
{
if(loop(l,k,n,i,b))
{
break;
}
}
}
int loop(int l,int k,int n,int i,int b[])
{
int m,o;
int sum=0;
for(m=0 ; m<=i ; m++)
{
b[l-1]=a[m];
if (Check2(b))
continue;
if (l != k)
{
loop(l+1,k,n,i,b);
}
else {
sum=0;
for(o=0; o<50; o++)
{
sum+=b[o];
}
if(sushu(sum+n) && sum+n>a[i])
{
printf("%d,",sum+n);
for(o=0;o<=i;o++)
{
if(Check3(b,a[o]))
{
continue;
}
printf("%d,",a[o]);
}
printf("\n");
return(1);
}
for(o=0; o<50; o++)
{
if(b[o]!=a[i] && b[o]!=0)
break;
}
if (o>=50)
return(0);
}
}
}