分析
正常模拟,输出到文件,建立静态数组,查询。
- 数组数很多,不能全部显示。
- 模拟类似于筛素数,每隔k就清除一个{置为一},不断更新k,直到没有变化发生
C++ 36ms
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
#define ffor(i,s,e) for(int i=s;i<e;i++)
#define out(x) cout<<x<<" "
#define nl cout<<endl
//data
typedef long long LL;
const int N=1000010;
int a[N];
int start,gn;
int res[N]={1, 3, 7, 15, 21, ```` 905697, 905701, 905725```` 911413,999985, 999987};
//module
bool set1(int k){//每次经过第k个0时置为一
int t=k;
bool change=false;
ffor(i,1,gn){
if(!a[i]){
t--;
if(t==0){
a[i]=1;
t=k;
change=true;
}
}
}
// ffor(i,1,gn){
// if(a[i]) continue;
// out(i);
// }
// nl;
return change;
}
int updatek(int nth){
ffor(i,1,gn){
if(!a[i]){
nth--;
if(!nth) return i;
}
}
return -1;
}
void setA(){
ffor(i,0,gn){
if(i&1) continue;
else a[i]=1;
}
bool change=true;
int k=3;//从第二个开始
int nth=3;
while(change){
change=set1(k);
k=updatek(nth);
nth++;
}
}
void init(){
cin>>start>>gn;
}
void AcWing(){
init();
//setA();
// freopen("out.txt","w",stdout);
//printf("{");
int ans=0;
ffor(i,0,N){
if(res[i]>start&&res[i]<gn){
//printf("%d, ",i);
ans++;
}
}
//printf("}");
cout<<ans<<endl;
}
int main(){
AcWing();
return 0;
}