题目描述:
算法思想:
- 求指定个数m的连续合数可以直接枚举两个质数构成的区间。
- 关于质数的确定,偶数质数只有一个即2,奇数质数最小为3。
// 判断是否为质数
for(int j=2;j<sqrt(next)+1;j++)
if(next%j==0){
t=0;
break;
}
- 由已知条件可得m>=1,所以直接从3开始向后寻找质数(next+=2,因为大于2的偶数为合数),再进行判断(两质数之间包含大于等于m个合数)
// 合数区间长度判定:next-pre
if(next-pre>m){
if(m!=1)
cout<<pre+1<<' '<<pre+m<<endl;
else
cout<<pre+1<<endl;
break;
}
全部代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 10;
int a[N] = {
0};
int m;
int main(){
cin>>m;
int next = 3,pre=3;
while(1){
int t=1;
// 判断是否为质数
for(int j=2;j<sqrt(next)+1;j++)
if(next%j==0){
t=0;
break;
}
// 合数区间长度判定:next-pre
if(next-pre>m){
if(m!=1)
cout<<pre+1<<' '<<pre+m<<endl;
else
cout<<pre+1<<endl;
break;
}
if(t) pre = next;
next+=2;
}
return 0;
}
运行结果: