#include<iostream>
using namespace std;
int num[40000]; //初始数组,只有奇数 ,已完成第一轮筛选 : 1,3,5,7,9
int lucky[20000]; //
void find(int n){
int count=0;
for(int i=1;i<=50000;i++){ //第二轮筛选
if(i%3 != 0){
num[++count]=i+i-1; //存放残留幸运数 : 1,3,7,9
}
}
// cout<<num[1]<<" "<<num[2]<<endl;
for(int i = 4;num[i-1] < n;i++){ //从第3个幸运数开始推算
// cout<<"第"<<i-1<<"\t个幸运数:"<<num[i-1]<<endl;
int lucky = num[i-1]; //前一个幸运数
int nextcount=0; //下一轮 幸运数残留个数
for(int j=1;j<=count;j++){ //筛选 ,遍历 上一轮 残留幸运数数组
if(j%lucky != 0){ //如果序号不是前一个幸运数的倍数
num[++nextcount]=num[j]; //存入这一轮的 幸运数残留数组
// cout<<num[j]<<" ";
}
}
// cout<<endl;
count=nextcount;
}
}
int main(){
int m,n;
cin>>m>>n;
find(n);
int s=0;
for(int i=1;num[i]<n;i++){
if(num[i]>m)
s++;
}
cout<<s<<endl;
return 0;
}
[蓝桥杯][2013年第四届真题]幸运数——代码解析
最新推荐文章于 2020-10-03 13:52:55 发布