当前位置: 首页 > news >正文

实用指南:老题新解|素数对

《信息学奥赛一本通》第131题:素数对

题目描述
定义两个相差为 222 的素数称为素数对,如 5557,177,177,17191919 等,要求找出所有两个数均不大于 nnn 的素数对。
输入格式
一个正整数 nnn1≤n≤100001 \le n \le 100001n10000
输出格式
所有小于等于 nnn 的素数对。每对素数对输出一行,中间用单个空格隔开。若没有找到任何素数对,输出 empty
输入输出样例 #1
输入 #1
10
输出 #1
3 5
5 7
输入输出样例 #2
输入 #2
100
输出 #2
3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73
输入输出样例 #3
输入 #3
3
输出 #3
empty

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第 131 题:素数对。

image.png

一、题目描述

洛谷的题号是:B2132 素数对

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 131 题。

根据输入格式的描述,输入只有一个整数 n,数据范围:1≤n≤100001 \le n \le 100001n10000,使用 int 类型。

int n;
cin>>n;

输入完成后,我们来分析题意,根据题目描述,我们需要找到两个相差为 2 的素数对,并将所有不大于 n 的素数对输出。

所以我们需要使用 for 循环变量遍历,从 2 开始到 n。

for(int i=2;i<=n;i++)
{
}

中间加上判断素数的函数,只要符合就输出数据。

素数的函数写法如下,孰能生巧,直接写出,根据素数的特点写出函数:

bool pdss(int k)
{
if(k==1) return false;
else
{
//除1和本身的数以外能找到整除的数
for(int i=2;i<k;i++)
{
if(k%i==0) return false;
}
return true;
//返回真
}
}

将函数添加进主函数中。

for(int i=2;i<=n;i++)
{
//符合素数特点 输出i和i+2
if(pdss(i)==true&&
pdss(i+2)==true)
{
cout<<i<<
" "<<i+2<<endl;
}
}

如果不存在素数对,就输出 empty,可以加上一个标记,如果找到就标记为一个数,最后判断这个数据即可。

int flag=1;
for(int i=2;i<=n;i++)
{
//符合素数特点 输出i和i+2
if(pdss(i)==true&&
pdss(i+2)==true)
{
cout<<i<<
" "<<i+2<<endl;
//找到数据将数据置为其他数
flag=0;
}
}

判断 flag 是否为 1,如果为 1,则输出 empty。

if(flag==1)
{
cout<<
"empty";
//不存在就输出empty
}

按照样例输入对数据进行验证。

image.png

符合样例输出,到网站提交测评。

image.png

发现有两个错误点,检查代码,发现是主函数的循环出现了问题,因为要输出 i+2,而 i+2 要到 n 就停止,但循环中却写了 n,因此最终的 i 会到 n+2 ,所以在主函数中修改。

for(int i=2;i<=n-2;i++)

再次提交。

image.png

测试通过!

三、完整代码

该题的完整代码如下:

#include<iostream>#include<bits/stdc++.h>using namespace std;bool pdss(int k){if(k==1) return false;else{//除1和本身的数以外能找到整除的数for(int i=2;i<k;i++){if(k%i==0) return false;}return true;//返回真}}int main(){int n;cin>>n;int flag=1;for(int i=2;i<=n-2;i++){//符合素数特点 输出i和i+2if(pdss(i)==true&&pdss(i+2)==true){cout<<i<<" "<<i+2<<endl;//找到数据将数据置为其他数flag=0;}}if(flag==1){cout<<"empty";//不存在就输出empty}return 0;}

四、总结

本题考察了素数判定与循环遍历的应用,主要涵盖以下知识点:

(1)通过自定义函数判断素数,利用除法特性进行判定。

(2)使用 for 循环遍历 2 到 n-2,避免越界访问 i+2。

(3)利用逻辑与运算符 && 同时判断 i 和 i+2 是否为素数。

(4)通过 flag 标记是否存在素数对,最后根据 flag 的值决定输出结果。

(5)熟悉基本输入输出和条件判断的使用方法。

常见易错点:

(1)循环范围写成 i <= n,导致输出越界(i+2 > n)。

(2)素数判定函数未正确处理 k=1 或边界情况,可能误判。

(3)素数判断写成 for (int i=2; i<k; i++),效率较低,若未优化到 sqrt(k) 容易超时(大数据时)。

(4)忘记设置 flag 或 flag 初值错误,导致没有素数对时输出异常。

(5)输出格式不符合要求,例如遗漏空格或未换行。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~

http://www.jsqmd.com/news/4199/

相关文章:

  • 人文领域的创新乏力:当价值内卷遇上元人文AI的破局之光
  • SimCC: a Simple Coordinate Classification Perspective for Human Pose Estimation
  • 10.1.1 启用python达成第一个遗传算法
  • [iOS] OC高级编程 - 引用计数 (1) - 详解
  • Docker Docker Compose 完整入门与实用技巧 - 教程
  • PySide6 之鼠标事件写字板
  • 深入解析:golang基础语法(三)常量、指针、别名、关键字、运算符、字符串类型转换
  • 单B细胞技术如何实现兔单抗高通量高特异制备
  • HP激光墨盒换墨粉
  • 实用指南:Golang学习笔记: 常用标准库
  • AI论文速读 | 当大语言模型遇上时间序列:大语言模型能否执行多步时间序列推理与推断 - 指南
  • unordered_map性能被吊打!我用基数树让内存池性能暴涨几十倍的秘密
  • 详细介绍:《 Linux 点滴漫谈: 一 》开源之路:Linux 的历史、演进与未来趋势
  • 深入解析:TENGJUN“二合一(2.5MM+3.5MM)”耳机插座:JA10-BPD051-A;参数与材质说明
  • CentOS 9服务器版 部署Zabbix7.0 server端 - 详解
  • 深入解析:Apache 生产环境操作与 LAMP 搭建指南
  • JAVA第一天
  • C# Avalonia 15- Animation- CustomEasingFunction
  • US$189 VVDI2 BMW FEM amp; BDC Functions Authorization Service With Ikeycutter Condor
  • nginx平滑升级+location案例 - 教程
  • 深入解析:装备制造企业支撑智能制造的全生命周期数据治理实践
  • 深入解析:P4779 【模板】单源最短路径(标准版)
  • US$36 35160WT Adapter for CG Pro 9S12 Programmer
  • [更新完毕]2025华为杯B题数学建模研赛B题研究生数学建模思路代码文章成品:无线通信系统链路速率建模 - 指南
  • 模式组合应用-享元模式 - 详解
  • 【Spring Boot】自定义starter
  • redis-bitMap类型基本命令
  • PrintNightmare漏洞仍未终结:深入解析PnP配置绕过与防护方案
  • Go 1.26 内置函数 new 新特性
  • 基于SpringBoot及PostgreSQL的国家减肥食谱管理项目(上):区域与省份安装搭建