天天看點

判斷一個數字能否被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;
}