题目描述:
如果 m 和 m + 2 都是素数,则称它们是孪生素数。输入一些正整数 m,输出两个数均不超过 m 的最大孪生素数。
输入描述:
一些正整数 m (5 <= m <= 10000),每个占一行。
输出描述:
对应每个输入的 m,输出占一行,两个数之间以空格分隔。
样例输入:
20
1000
样例输出:
17 19
881 883
本质上而言这是一个求素数的问题,要求是找到在m的范围内找到i和i+2两个最大的素数。
要找到最大的素数应从后往前找;即从大往下开始遍历。同时构造判断素数的函数。若满足i和i+2同为素数输出即可。
#include <iostream> #include <cmath> using namespace std; int prime_(int a) { int m; m=sqrt(a); for(int i=2;i<m;i++) { if(a%i==0) return 0; } return 1; } int main() { int m; while (cin>>m) { for(int i=m-2;i>=3;i--) { if(prime_(i)&&prime_(i+2)) { cout<<i<<" "<<i+2<<endl; break; } } } return 0; }