思路
使用埃式筛的方法使的 a[i]=i 的最大质因数。当 i 是质数时,a[i]=0。
判断 a[i] 是否 <=B,如果是,ans++。如果 a[i] 是质数,判断 i 是否 <=B。
代码
#include<bits/stdc++.h>
using namespace std;
int n,B,ans=0,a[1000005];
int main(){
cin>>n>>B;
for(int i=2;i<=n;i++){
if(a[i]==0){
for(int j=2;j*i<=n;j++) a[j*i]=i;
}
}
// for(int i=1;i<=n;i++) cout<<a[i]<<endl;
for(int i=1;i<=n;i++){
if(a[i]>0&&a[i]<=B) ans++;
else if(i<=B) ans++;
}
cout<<ans;
return 0;
}