正在载入在线练习界面,本页内容可直接阅读…
AK CSP › NOIP 普及 2010 第一轮真题 › 第 29 题
NOIP 普及 2010 第一轮 第 29 题:哥德巴赫猜想验证:第 3 空
题目
完善程序:
(哥德巴赫猜想)哥德巴赫猜想是指,任一大于 $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[r]=i
题解
考点定位
本题(哥德巴赫第③空)考「素数入表」,对应大纲 3.3.4 筛法(难度【2】)。
解题过程
③处确认 i 是素数后存入表:
``cpp p[r] = i; // r 已 ++ ``
注意先 r++ 再赋值 p[r]=i(新长度 r,新元素放末位)。答案:p[r]=i。
易错提醒
① r 是「当前素数个数」,++ 后指向新空位;② 别写成 p[i]=r(下标与值颠倒)。
真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1
京公网安备11010502062986号