素数对 (C++)

文章讲述了如何编写程序找出所有两个数差为2且都小于等于n的素数对。通过判断素数的算法,从2开始遍历到n,检查每个数及它加2的数是否都是素数,若是则输出这对素数。当没有找到素数对时,输出empty。代码示例使用C++实现,并提供了验证方法。
摘要由CSDN通过智能技术生成

题目描述:

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

输入格式:

一个正整数n。1≤n≤1000

输出格式:

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

输入样例:

100

输出样例:

3 5

5 7

11 13

17 19

29 31

41 43

59 61

71 73


分析:

这题其实就是让你去一对一对找差值为2的素数然后输出即可。

那怎么判断是素数吗,首先要知道素数的概念:

质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

                                                                                          -----百度百科

素数概念知道了,那该怎们判断?

只需要从2到\sqrt{n}进行判断是否为n的因数,如果是因数,那么这个数不是素数,如果枚举完后并没有找到除了1和n的因数那么就是素数,那么好,把这些过程如何压缩成函数?

函数代码:

int sushu(int x)//sushu是函数名,int x是判断的值
{
    int t=sqrt(x);
    for(int i=2;i<=t;i++)//记住不能从1开始,不懂的看下定义
        if(x%i==0)//如果是x的因数返回0
            return 0;
    return 1;//如果没有除了1和x的因数返回1
}

代码会写了吧?


代码: 

#include <bits/stdc++.h>
using namespace std;
int sushu(int x)//sushu是函数名,int x是判断的值
{
    int t=sqrt(x);
    for(int i=2;i<=t;i++)//记住不能从1开始,不懂的看下定义
        if(x%i==0)//如果是x的因数返回0
            return 0;
    return 1;//如果没有除了1和x的因数返回1
}
int main()
{
    int n,flag=0;//flag是用来判断有没有素数对 
	cin>>n;
	for(int i=2;i<=n-2;i++)//从2开始,因为1既不是素数也不是合数
		if(sushu(i)==1&&sushu(i+2)==1)
		{
			printf("%d %d\n",i,i+2);
			flag=1;//有素数对的话flag=1 
		}
	if(flag==0) cout<<"empty"; 
    return 0;
}

敢ctrl+c然后ctrl+v你试试


看完了,你学费了吗 ?

验证方法:洛谷B2132 素数对直接AC

有问题的可以在评论区讨论。


补充的知识:

1.合数

什么是合数?

合数的概念:合数是指在大于1的整数中除了能被1和本身整除外,还能被其他数(0除外)整除的数,与之相对的是质数。

                                                                                --百度百科

2. 1算合数还是质数

1既不是合数也不是质数,因为1的因数只有1本身。

3.为什么作者在判断素数是只枚举到\sqrt{n}?

剩点时间,因为你会发现从2枚举到n-1没必要,还耗时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值