// 判断一个数是否为质数,返回值大于0则是
int IsPrime(int n)
{
   int nReturn = 0;
   if (n <= 0) return 0;
   int i;
   for (i = 2; i <= n - 1; i++)
      if (n % i != 0)
          nReturn = 1;   return nReturn;
}
// 在一定数值范围内逐个找出两个质数构成
void GetTwoPart(int min, int max)
{
   int i, j, n, s ,p, f;
   for (i = min; i <= max; i++)
   { 
      for (j = 2; j <= i / 2; j++)
        if (IsPrime(j) && IsPrime(i - j))
            printf("%d = %d + %d.\n", i, j, i-j);
   }
}// 程序入口
main ()
{
   GetTwoPart(1,1000);
}

解决方案 »

  1.   

    GetTwoPart函数中有一些没用到的变量,去掉吧,看着太难受
    void GetTwoPart(int min, int max)
    {
      int i, j;
      for (i = min; i <= max; i++)
      { 
          for (j = 2; j <= i / 2; j++)
            if (IsPrime(j) && IsPrime(i - j))
                printf("%d = %d + %d.\n", i, j, i-j);
      }
    }
      

  2.   

    int IsPrime(int n);
    效率太低
    优化后增加%100以上。int IsPrime(int n)
    {
      int nReturn = 0;
      if (n <= 1) return 0;
      int i;
      if(!(n&1))
        return 0;
      for (i = 2; i <= n - 1; i+=2)
      {
          if (n % i == 0)
              return 0;
      }
      return 1;}
      

  3.   

    to:Dreambird
    你认为除了穷举还有其他办法吗?
    如果真有一个公式的话,歌德巴赫猜想也就不叫歌德巴赫猜想了。