今天无意间看到一篇文,讲经典C语言面试十个代码。其中一个讲如何判断一个数字可被两个素数相加得到,突然想到自己刚写程序的时候写过一个判断一个数字能否被4个素数相加的代码。特此翻出这篇古董代码。因为最近都没在看程序,只能翻翻压箱底的货啦。惭愧惭愧,同学你周一还要考试啊!赶紧看书去吧。还那么不自律!
#include <stdio.h>
int isprime(int);
int main (void)
{
int bum = 24; //当时连scanf都不会,所以用的是直接在程序里面给出数字,这个bum就是可以任意修改的变量了。
int a1 = 2, a2 = 2, a3 = 2, a4 = 2;
for (a1 = 2; a1 <= bum -1 - a2 - a3 - a4; a1++ )
{
if (isprime(a1) == 0)
continue;
else
a1 = isprime(a1);
}
while ( a1 != isprime(a1))
{
a1--;
}
for (a2 = 2; a2 <= bum - 1-a1-a3-a4; a2++ )
{
if (isprime(a2) == 0)
continue;
else
a2 = isprime(a2);
}
while ( a2 != isprime(a2))
{
a2--;
}
for (a3 = 2; a2 <= bum -1 -a1-a2-a4; a3++ )
{
if (isprime(a3) == 0)
continue;
else
a3 = isprime(a3);
}
while ( a3 != isprime(a3))
{
a3--;
}
for (a4 = 2; a4 <= bum - 1 -a1-a2-a3; a4++ )
{
if (isprime(a4) == 0)
continue;
else
a4 = isprime(a4);
}
while ( a4 != isprime(a4))
{
a4--;
}
printf("%5d %5d %5d %5d", a1, a2, a3, a4);
return 0;
}
int isprime(int num)
{
int i;
int k = 1;
for (i = 2; i*i <= num; i++)
{
if ((num%i) != 0)
{
k = 1;
continue;
}
else
{
k=0;
break;
}
}
if (k == 0)
return 0;
if (k == 1)
return num;
}