https://blog.csdn.net/update7/article/details/68951980
//THIS CODE NOT WORKS
#include<bits/stdc++.h>
#define ls o<<1
#define rs o<<1|1
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
typedef long long LL;
template<class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template<class T> inline void gmin(T &a,T b){if(b<a)a=b;}
const int N=1e6+10,M=0,Z=1e9+7,W=13,L=2e6;
const double eps=1e-10;
const int dy[4]={-1,0,0,1},dx[4]={0,-1,1,0};
using namespace std;
int casenum,casei;
int id;
int n,m;
int a[N];
void dfs(int pre){
if(a[pre]>=n)
return;
int cnt=pre;
for(int i=pre;i<=n;i++){
if(i%a[pre]!=0){
a[cnt]=a[i];
cnt++;
}
}
dfs(pre+1);
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d%d",&m,&n);
int cnt=0;
for(int i=1;i<=n;i++)
a[i]=2*i-1;
dfs(2);
for(int i=1;a[i]<n;i++){
if(a[i]>m)
cnt++;
}
printf("%d\n",cnt);
return 0;
}
下面这个代码要算好相对位置
很直接
#include<bits/stdc++.h>
#define ls o<<1
#define rs o<<1|1
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
typedef long long LL;
template<class T> inline void gmax(T &a,T b){if(b>a)a=b;}
template<class T> inline void gmin(T &a,T b){if(b<a)a=b;}
const int N=5e5+10,M=0,Z=1e9+7,W=13,L=2e6;
const double eps=1e-10;
const int dy[4]={-1,0,0,1},dx[4]={0,-1,1,0};
using namespace std;
int casenum,casei;
int id;
int n,m,nn;
int a[N];
int main(){
// freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
scanf("%d%d",&n,&m);
int k=1;
for(int i=1;i<m;i+=2)
a[k++]=i;
//k related number
for(int j=2;j<k;j++){
if(a[j]>=k)break;
int num=0;//delete in this loop
//a[j]-1 keep
for(int e=a[j];e<k;){
if(e+a[j]<k){
memcpy(a+e-num,a+e+1,sizeof(int)*(a[j]-1));
num++;
}else{
if(e!=k-1)
memcpy(a+e-num,a+e+1,sizeof(int)*(k-e-1));
num++;
break;
}
e+=a[j];
}
k-=num;
}
int ans=0;
int i=1;
while(i<k&&a[i]<=n)i++;
while(i<k&&a[i]<=m)
ans++,i++;
printf("%d\n",ans);
return 0;
}