问题描述
如果n和n+2都是素数,称它们是孪生素数。
输入整数m,输出两个均不超过m的最大孪生素数。5<=m<=10000
输入格式:
一个整数m
输出格式:
两个空格间隔的整数,表示m以内最大的孪生素数,小的一个在前,大的一个在后
样例输入:
样例输入1:
20
样例输入2:
1000
样例输出:
样例输出1:
17 19
样例输出2:
881 883
问题分析:
世界上怎么会有这么多水题?
时间限制10秒,好少。
祖传判断质数代码:
bool isprime(int num){
num = abs(num);
if(num == 2){
return true;
}
if(num%2 == 0 || num<2){
return false;
}else{
for(int i = 3; i*i <= num; i +=2){
if(num%i == 0){
return false;
}
}
return true;
}
}
接下来用for循环从大到小依次判断就行了。
AC代码:
#include<bits/stdc++.h>
using namespace std;
bool isprime(int num){
num = abs(num);
if(num == 2){
return true;
}
if(num%2 == 0 || num<2){
return false;
}else{
for(int i = 3; i*i <= num; i +=2){
if(num%i == 0){
return false;
}
}
return true;
}
}
int main ()
{
int n;
scanf("%d",&n);
if(n%2 == 0){
n -= 1;
}
for(int i = n; i >= 3; i -= 2){
if(isprime(i) && isprime(i-2)){
printf("%d %d",i-2,i);
break;
}
}
return 0;
}