| 世界近代三大数学难题之哥德巴赫猜想。即任何一个大于6的偶数都可以表示成两个素数之和;任何一个大于9的奇数都可以表示成三个素数之和。 1966年,中国数学家陈景润证明了“任何一个充分大的偶数都可以表示成一个素数与另一个素因子不超过2个的数之和”,简称“1+2”。

| 输入:若干个2001以内的正偶数。如:

4
6
8


| 输出:输出所给正偶数的素数之和,每个占一行,如4=2+2。如果有多种可能,只输出一种,即第一个素数最小的。如:

4=2+2
6=3+3
8=3+5


实现代码:

  1. #include<stdio.h>
  2. int is_SuShu(int a){
  3. for (int k = 2; k < a; k++){
  4. if (a%k == 0)
  5. return 1;//不是素数返回1
  6. }
  7. return 0;//是素数返回0
  8. }
  9. int main(){
  10. int arr2[2000], arr1[2001] = { 0 }; int i = 0;  int n = 1, r = 0; int k; arr2[0] = 2;int m;
  11. while (EOF != (scanf("%d", &arr1[i]))){
  12. i++;
  13. }
  14. for (int j = 3; j < 2000; j++){//找出2000以内所有素数放到数组中
  15. for (int k = 2; k < j; k++){
  16. if (j%k == 0)
  17. break;
  18. else if (j==k+1)
  19. arr2[n] = j;
  20. }
  21. n++;
  22. }
  23. r = n;
  24. for (int m = 0; m < i; m++){
  25. for (int e = 0; e <= r; e++){
  26. if (0 == is_SuShu(arr1[m] - arr2[e])){
  27. printf("%d=%d+%d\n", arr1[m], arr2[e], arr1[m] - arr2[e]);
  28. break;
  29. }
  30. }
  31. }
  32. return 0;
  33. }

| 思路:用遍历的“笨”办法,一个个的试,判断是不是素数。