【想进阿里的小菜鸟】有趣的哥德巴赫猜想

本来不打算发博客呢,但是在小老弟的督促下还是决定要坚持!要坚持!
今天比较忙,没抽出时间写新的题目,这里就拿一道我计算机专业的小宝贝儿的题来说说吧!

【问题描述】验证哥德巴赫猜想:任何一个大于6的偶数均可表示两个素数之和。例如,6=3+3,8=3+5,…,18=5+13,要求将6-100之间的偶数都表示为两个偶数之和,输出时一行输出五组。
【输入形式】无输入
【输出形式】按从小到大,每组五行。每组的格式为:四位=2位+2位。等号和加号两侧无空格。

话说过来,这还是我第一次用C++写一个完整的程序,居然不是Hello World,哈哈哈!这个问题呢写完之后成就感也挺大的,是挺有趣的一道编程题。这道题可以看作是几个小问题合起来的一个大问题,可能看题目感觉很慌张,但是一句一看的话发现还是相对轻松的。

C++写法

#include<iostream>
#include <iomanip>
using namespace std;
int prime(int m);
int main()
{
    
    
    int i, j, k, count = 0;
    for (i = 6; i <= 100; i += 2) //轮询大于六小于一百的偶数
    {
    
    
        for (j = 3; j <= i / 2; j++) //从3开始看有没有i的因数,i/2和sqrt(2)的性质类似 
        {
    
    
            if (prime(j) && prime(i - j))//方法调用,i=j+i-j
            {
    
    
                cout <<setw(4)<<setfill('0')<<i<<'='<<setw(2)<<setfill('0')<<i-j<<'+'<<setw(2)<<setfill('0')<<j<<" ";//这些C++的输出我都是现搜现用的十分感人!!!
                count++;
                if (count == 5) //格式输出,控制每组五行 
                {
    
    
                    cout <<'\n';
                    count = 0;
                }
                break;
            }
        }
    }
    return 0;
}

int prime(int m)//声明判断是否为素数的方法
{
    
    
    int i;
    for (i = 2; i <= m - 1; i++) 
    {
    
    
        if (m % i == 0)
            return 0;//调用时值为假
    }
    return 1;//调用时值为真
}

C写法

#include<stdio.h>
#include<math.h>
int prime(int m);
int main()
{
    
    
    int i, j, k, count = 0;
    for (i = 6; i <= 100; i += 2) 
    {
    
    
        for (j = 3; j <= sqrt(i); j++)  
        {
    
    
            if (prime(j) && prime(i - j))
            {
    
    
                printf("%4d=%02d+%2d", i,j,i-j);//为了赶进度我直接把0补上去了,马上熄灯断网了,我明天回来改
                count++;
                if (count == 5) 
                {
    
    
                    printf("\n");
                    count = 0;
                }
                break;
            }
        }
    }
    return 0;
}

int prime(int m)
{
    
    
    int i;
    for (i = 2; i <= m - 1; i++) 
    {
    
    
        if (m % i == 0)
            return 0;
    }
    return 1; 
}

11.20补充:
C语言中0的补位

%0nd

C++中0的补位

setfill("0")

今天只能匆忙结束了,我明天会回来补充一些东西。
Bingo!
今天是忙碌的一天呢!
我最终还是没能来得及写完他。

已经是第二天了…
我一定会回来补一种不用调用方法的解法。

猜你喜欢

转载自blog.csdn.net/weixin_49563267/article/details/109827916