哥德巴赫猜想

1 题目

功能:哥德巴赫猜想 描述: 任一大于2的整数都可写成两个质数之和 验证从 3 到 50 之间所有数都是否可以写成两个素数之和

2 思路

  1. 创建判断是否为素数的函数
  2. 从 3 到 50 循环判断是否可以有 2 个素数加和

3 代码

#include <stdio.h> 
#include <stdlib.h>
​
/**
功能:哥德巴赫猜想
描述:
  任一大于2的整数都可写成两个质数之和
  验证从 3 到 50 之间所有数都是否可以写成两个素数之和
**/
​
int ss(int i) {                         // 素数的判断
​
    int j;
    if (i <= 1)                         // 小于1的数不是素数
        return 0;
    if (i == 2)                         // 2是素数
        return 1;
    for (j = 2; j < i; j++) {           // 对大于2的数进行判断
        if (i % j == 0)
            return 0;
        else if (i != j + 1)
            continue;
        else
            return 1;
    }
}
​
int main(int argc, char const *argv[]) { 
​
    int i, j, k, flag1, flag2, n = 0;
    for (i = 3; i <= 50; i++)
      for (k = 2; k <= i / 2; k++) {
          j = i - k;
          flag1 = ss(k);                    // 判断拆分出的数是否是素数
          if (flag1) {
              flag2 = ss(j);
              if (flag2) {                  // 如果拆分出的两个数均是素数则输出
                  printf("%d = %d+%d,\t", i, k, j);
                  n++;
                  if (n % 5 == 0)
                      printf("\n");
              }
          }
      }
  printf("\n");
} 

示例结果:

$ gcc ex068.c -o demo
$ ./demo
4 = 2+2,  5 = 2+3,  6 = 3+3,  7 = 2+5,  8 = 3+5,
9 = 2+7,  10 = 3+7, 10 = 5+5, 12 = 5+7, 13 = 2+11,
14 = 3+11,  14 = 7+7, 15 = 2+13,  16 = 3+13,  16 = 5+11,
18 = 5+13,  18 = 7+11,  19 = 2+17,  20 = 3+17,  20 = 7+13,
21 = 2+19,  22 = 3+19,  22 = 5+17,  22 = 11+11, 24 = 5+19,
24 = 7+17,  24 = 11+13, 25 = 2+23,  26 = 3+23,  26 = 7+19,
26 = 13+13, 28 = 5+23,  28 = 11+17, 30 = 7+23,  30 = 11+19,
30 = 13+17, 31 = 2+29,  32 = 3+29,  32 = 13+19, 33 = 2+31,
34 = 3+31,  34 = 5+29,  34 = 11+23, 34 = 17+17, 36 = 5+31,
36 = 7+29,  36 = 13+23, 36 = 17+19, 38 = 7+31,  38 = 19+19,
39 = 2+37,  40 = 3+37,  40 = 11+29, 40 = 17+23, 42 = 5+37,
42 = 11+31, 42 = 13+29, 42 = 19+23, 43 = 2+41,  44 = 3+41,
44 = 7+37,  44 = 13+31, 45 = 2+43,  46 = 3+43,  46 = 5+41,
46 = 17+29, 46 = 23+23, 48 = 5+43,  48 = 7+41,  48 = 11+37,
48 = 17+31, 48 = 19+29, 49 = 2+47,  50 = 3+47,  50 = 7+43,
50 = 13+37, 50 = 19+31,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值