题目描述
定义两个相差为 2 的素数称为素数对,如 5 和 7,17 和 19 等,要求找出所有两个数均不大于 n 的素数对。
输入格式
一个正整数 n。1≤n≤10000。
输出格式
所有小于等于 n 的素数对。每对素数对输出一行,中间用单个空格隔开。若没有找到任何素数对,输出 empty
。
输入输出样例
输入 #1
10
输出 #1
3 5 5 7
输入 #2
100
输出 #2
3 5 5 7 11 13 17 19 29 31 41 43 59 61 71 73
输入 #3
3
输出 #3
empty
源代码
#include <bits/stdc++.h>
using namespace std;
int s,sum=-1;
bool flag=0;
bool pd(int x) //判断数x是否为素数
{
bool flag=1;
for(int i=2;i<x;i++)
{
if(x%i==0) flag=0;
}
if(flag==1) return 1;
else if(flag==0) return 0;
}
void dfs(int num)
{
if(num>=s)
{
if(flag==0) cout<<"empty"<<endl;
return;
}
if(pd(num)==1 && pd(num+2)==1 && num+2<=s)
{
flag=1;
cout<<num<<" "<<num+2<<endl;
}
dfs(num+1);
}
int main()
{
cin>>s;
if(s<=4) cout<<"empty"<<endl;
else dfs(2);
return 0;
}
测试点信息
总结
从一遍历到n,判断当前数是否为素数,而且当前数加2是否也为素数,如果符合条件,那么输出这两个数,进行下一个数的判断,直到到达边界。到达边界后,判断是否选出来了数,如果没有选出来数,那么就输出"empty".