正在载入在线练习界面,本页内容可直接阅读…

AK CSP › NOIP 普及 2010 第一轮真题 › 第 30 题

NOIP 普及 2010 第一轮 第 30 题:哥德巴赫猜想验证:第 4 空

完善程序 · 初等数论 · 答案 p[j]+p[k]

题目

完善程序:
(哥德巴赫猜想)哥德巴赫猜想是指,任一大于 $2$ 的偶数都可写成两个质数之和。迄今为止,这仍然是一个著名的世界难题,被誉为数学王冠上的明珠。试编写程序,验证任一大于 $2$ 且不超过 $n$ 的偶数都能写成两个质数之和。

#include <iostream>
using namespace std;

int main()
{
    const int SIZE = 1000;

    int n, r, p[SIZE], i, j, k, ans;
    bool tmp;

    cin>>n;
    r = 1;
    p[1] = 2;
    for (i = 3; i <= n; i++) {
        [    ①    ];
        for (j = 1; j <= r; j++)
            if (i % [     ②   ]  == 0) {
                tmp = false;
                break;
            }
        if (tmp) {
            r++;
            [    ③   ] ;
        }
    }

    ans = 0;
    for (i = 2; i <= n / 2; i++) {
        tmp = false;
        for (j = 1; j <= r; j++)
            for (k = j; k <= r; k++)
                if (i + i == [     ④   ] ) {
                    tmp = true;
                    break;
                }
        if (tmp)
            ans++;
    }
    cout<<ans<<endl;
    return 0;
}

若输入 $n$ 为 $2010$,则输出[    ⑤   ]时表示验证成功,即大于 $2$ 且不超过 $2010$ 的偶数都满足哥德巴赫猜想。

本小题

④处应填( )

答案

p[j]+p[k]

题解

考点定位

枚举两个质数,检查它们的和。

解题过程

外层i代表待验证偶数的一半,目标偶数为i+i。内层j、k枚举质数表中的两个位置,所以完整条件是:

``cpp if (i + i == p[j] + p[k]) ``

答案:p[j]+p[k](交换加数顺序也可以)。

易错提醒

目标数的变量i与质数表下标j、k各有含义,不能把p[j]写成p[i]。

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号