首页 > 其他分享 >信息学奥赛一本通:1403:素数对

信息学奥赛一本通:1403:素数对

时间:2024-04-11 11:58:56浏览次数:24  
标签:信息学 输出 int flag 素数 bool 奥赛 1403 true

【题目描述】

两个相差为2的素数称为素数对,如5和7,17和19等,本题目要求找出所有两个数均不大于n的素数对。

【输入】

一个正整数n(1≤n≤10000)。

【输出】

所有小于等于n的素数对。每对素数对输出一行,中间用单个空格隔开。若没有找到任何素数对,输出empty。

【输入样例】

100

【输出样例】

3 5
5 7
11 13
17 19
29 31
41 43
59 61
71 73

【参考程序一】

定义了一个函数 isShushu 用于判断一个整数 a 是否为素数。
以下是对代码的具体解释:
  • bool flag = true;:初始化一个布尔类型的标志变量 flag,初始值为 true 。
  • 接下来使用一个 for 循环,从 2 开始到 sqrt(a)(即 a 的平方根)。
  • 在循环中,如果 a 能被当前的 i 整除,即 a % i == 0 ,则设置 flag 为 false ,并使用 break 终止循环。
  • 最后,函数返回 flag 的值。如果 flag 为 true,表示 a 是素数;如果 flag 为 false,则表示 a 不是素数。
这段代码通过循环判断是否存在可以整除 a 的数,来确定 a 是否为素数。

经过两次素数的判断,若都满足素数的条件即为一组素数对

#include<bits/stdc++.h>
using namespace std;

bool isShushu(int a)
{
	bool flag=true;
	for(int i=2;i<=sqrt(a);i++)
	{
		if(a%i==0)
		{
			flag=false;
			break;
		}
	}
	
	return flag;
}

int main()
{
	int n,count=0;
	cin>>n;
	if(n>2)
	{
		for(int i=2;i<=n-2;i++)
		{
			if(isShushu(i)&&isShushu(i+2))
			{
				cout<<i<<" "<<i+2<<endl;
				count++;
			}
		}
		
		if(count==0)
		{
			cout<<"empty";
		}
	}
	else
	{
		cout<<"empty";
	}
	
	return 0;
 }

【参考程序二】

#include<bits/stdc++.h>
using namespace std;
int n,flag=1;
bool check(int n)//求素数
{
	for(int i=2;i<=sqrt(n);i++)
	{
		if(n%i==0)return false;
	}
	return true;
}
int main()
{
	cin>>n;
	for(int i=2;i<=n-2;i++)
	{
		if(check(i+2)&&check(i))//如果i和i+2都是素数就输出
		{
			cout<<i<<" "<<i+2<<"\n";
			flag=0;//flag归0
		}
	}
	if(flag)cout<<"empty";
	return 0;
}

标签:信息学,输出,int,flag,素数,bool,奥赛,1403,true
From: https://blog.csdn.net/u014117969/article/details/137633299

相关文章

  • 洛谷p1403
    简单数论题求约数个数;本题需要用到质因数分解求约数个数,如果枚举一个一个求约数个数的话,你将会发现你已经喜提超时,见图1测试(图片);#include<bits/stdc++.h>usingnamespacestd;constintN=1e6+10;intf[N];intn;intsum;voidsolve(intx){intcnt=0;......
  • 信息学奥赛一本通:1398:短信计费
    【题目描述】用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送。假设已经知道你当月所发送的短信的字数,试统计一下你当月短信的总资费。【输入】......
  • 初三奥赛模拟测试4
    初三奥赛模拟测试4\(T1\)最后一课\(100pts\)简化题意:给定\(k,x_{1},y_{1},x_{2},y_{2}\),求\(\min\{(x-x_{1})^2+(k-y_{1})^2+(x-x_{2})^2+(k-y_{2})^2\}\)。正解对\(k,y_{1},y_{2}\)同侧/异侧进行分讨,冲个将军饮马问题即可。点击查看代码llwork(llx1......
  • 初三奥赛模拟测试4
    初三奥赛模拟测试4$T1$最后一课题目描述姬子正要去找Kiana,但在这之前,她还需要去一个地方。在平面直角坐标系上,有一条直线\(y=k\),还有两点\(P(x_1,y_1),Q(x_2,y_2)\)。姬子在点P处,Kiana在点Q处。姬子希望先走到直线\(y=k\)上,然后再去找Kiana。求姬子走到Ki......
  • 初三奥赛模拟测试4
    前言\(CSP-S\)模拟赛,确实比前几次简单多了。\(T1~100pts\):签到题。\(T2~100pts\):二分直接跑即可。\(T3~40pts\):首先他给的这个快读没法用。赛时joker了,打了个\(n^2~DP\),然后优化了\(50min\)换了个转移方程还是\(n^2\),复杂度打假了。因为赛时懒得跑线段......
  • 信息学奥赛一本通题目解析:1085:球弹跳高度的计算(循环)
    【题目描述】一球从某一高度hℎ落下(单位米),每次落地后反跳回原来高度的一半,再落下。编程计算气球在第1010次落地时,共经过多少米?第1010次反弹多高?输出包含两行,第1行:到球第1010次落地时,一共经过的米数。第2行:第1010次弹跳的高度。【输入】输入一个整数hℎ,表示球的初始......
  • 信息学奥赛一本通题目解析:1938:【07NOIP普及组】奖学金(排序)
    【题目描述】某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前55名学生发奖学金。期末,每个学生都有33门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学......
  • 信息学奥赛一本通题目解析:1415:【17NOIP普及组】图书管理员(字符串)
    【题目描述】图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。小D刚刚当上图书馆的管理员,她知......
  • 信息学奥赛一本通题目解析:1204:爬楼梯(记忆化递归)
    【题目描述】树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。【输入】输入包含若干行,每行包含一个正整数N,代表楼梯级数,1≤N≤30。【......
  • 生物信息学数据库分类
    生物信息学数据库(一)文献数据库1、PubMed:拥有超过两百六十万生物医学文献的数据库,这些文献来源于MEDLINE,也就是生物医学文献数据库、生命科学领域学术杂志、以及在线的专业书籍。链接:PubMed(nih.gov)PubMed存在的问题(1)搜索1995年前文献中排名是为以后的作者(2)搜索1976......