天天看点

判断一个数字能否被4个素数相加得到

今天无意间看到一篇文,讲经典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;
}