证明任意一个偶数为两个素数之和

2685阅读 0评论2012-11-20 dyli2000
分类:

一、案例工程


1、案例代码


  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #include <math.h>
  4. #define YES 1
  5. #define NO 0

  6. int isprime(int x)
  7. {
  8.     int i = 2;
  9.     bool flag = false;
  10.     for(; i < sqrt(x); i++)
  11.     {
  12.         if(x % i == 0)
  13.         {
  14.             flag = false;
  15.             return NO;
  16.         }
  17.         else
  18.             flag = true;
  19.     }
  20.     return YES;
  21. }

  22. void prove_1_even_has_2_prime(int x)
  23. {
  24.     int i = 2;
  25.     for (; i < x/2; i++)
  26.     {
  27.         if(isprime(i))
  28.         {
  29.             if(isprime(x-i))
  30.                 printf("%d is a even,the prime are : %d,%d\n",x,i,x-i);
  31.         }
  32.     }
  33. }

  34. int main()
  35. {
  36.     int a;
  37.     printf("Input one even :\n");
  38.     scanf("%d",&a);
  39.     if(a%2 == 0)
  40.         prove_1_even_has_2_prime(a);
  41.     else
  42.         printf("%d is not a ever number\n",a);

  43.     return 0;
  44. }

2、编译过程


  1. [root@localhost arithmetic]# gcc -o evenAndprime evenAndprime.c -lm

注意要加上-lm

 

3、实数验证


  1. [root@localhost arithmetic]# ./evenAndprime
  2. Input one even :
  3. 50
  4. 50 is a even,the prime are : 3,47
  5. 50 is a even,the prime are : 7,43
  6. 50 is a even,the prime are : 9,41
  7. 50 is a even,the prime are : 13,37
  8. 50 is a even,the prime are : 19,31

 

二、算法分析

image

 

 

    算法思想:如果需验证的数置于变量X中,则可依次从X中减去i,其中i从2变化到X/2。

上一篇:AOC显示器 显示“输入不支持” 解决方案
下一篇:visual studio2008各个窗体错乱现象处理