给定区间 [a,b],输出这个区间里最长的连续合数段。
输入格式
一行,两个整数 a,b。
输出格式
一行,输出最长的连续合数段。
如果答案不唯一,则输出首项最小的那一段。
数据范围
1≤a≤b≤10000
输入样例:
1 10
输出样例:
8 9 10
#include<iostream>
using namespace std;
int a,b;
const int M = 10000+1000;
int ans[M];
int m,x;
void cheak()
{
for(int i = 2; i<=100;i++){
for(int j=2; i*j<=10000;j++){
ans[i*j]=1;
}
}
}
int main()
{
cin>>a>>b;
cheak();
// for(int i = a; i<=b; i++){
// cout<<"i="<<i<<" ans[i]="<<ans[i]<<"\n";
// }
for(int i = a+1;i<=b;i++){
//cout<<"i="<<i<<" ";
if(ans[i-1]>0&&ans[i]){
ans[i]=ans[i-1]+1;
// cout<<i<<" ans[i]"<<ans[i]<<"\n";
if(ans[i]>m){
//cout<<"i-1="<<i<<" "<<ans[i-1]<<" ans[i]"<<ans[i]<<"\n";
m=ans[i];
// cout<<"m="<<m<<"\n";
x=i+1-ans[i];
}
}else if(ans[i]){
if(ans[i]>m){
m=ans[i];
x=i+1-ans[i];
}
}
}
for(int i=x;ans[i]>0;i++){
cout<<i<<" ";
}
return 0;
}