tjut 5901

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/luozhong11/article/details/53039227
#include <bits/stdc++.h>  
#define ll long long  
using namespace std;  
ll f[340000],g[340000],n;  
void init(){  
    ll i,j,m;  
    for(m=1;m*m<=n;++m)f[m]=n/m-1;  
    for(i=1;i<=m;++i)g[i]=i-1;  
    for(i=2;i<=m;++i){  
        if(g[i]==g[i-1])continue;  
        for(j=1;j<=min(m-1,n/i/i);++j){  
            if(i*j<m)f[j]-=f[i*j]-g[i-1];  
            else f[j]-=g[n/i/j]-g[i-1];  
        }  
        for(j=m;j>=i*i;--j)g[j]-=g[j/i]-g[i-1];  
    }  
}  
int main(){  
    while(scanf("%I64d",&n)!=EOF){  
        init();  
        cout<<f[1]<<endl;  
    }  
    return 0;  
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章