P2568-GCD【欧拉函数,欧拉筛】
生活随笔
收集整理的這篇文章主要介紹了
P2568-GCD【欧拉函数,欧拉筛】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
正題
題目鏈接:https://www.luogu.org/problemnew/show/P2568
題目大意
求有多少個數對滿足gcd(x,y)=pri(x,y≤n)gcd(x,y)=pri(x,y\leq n)gcd(x,y)=pri(x,y≤n)
解題思路
首先對于
gcd(x,y)=pgcd(x,y)=pgcd(x,y)=p
=>gcd(x/p,y/p)=1=>gcd(x/p,y/p)=1=>gcd(x/p,y/p)=1
那么對數就是(∑i=1nφ(i))?2?1(\sum_{i=1}^n \varphi(i))*2-1(i=1∑n?φ(i))?2?1
枚舉就好了
codecodecode
#include<cstdio> #include<algorithm> #define ll long long using namespace std; const ll N=1e7+100; ll n,phi[N],pri[N],tot,ans; int main() {scanf("%lld",&n);phi[1]=1;for(ll i=2;i<=n;i++)if(!phi[i]){pri[++tot]=i;for(ll j=i;j<=n;j+=i){if(!phi[j]) phi[j]=j;phi[j]=phi[j]/i*(i-1);}}for(ll i=1;i<=n;i++)phi[i]+=phi[i-1];for(ll i=1;i<=tot;i++)ans+=phi[n/pri[i]]*2-1;printf("%lld",ans); }總結
以上是生活随笔為你收集整理的P2568-GCD【欧拉函数,欧拉筛】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美国太空部队再向 SpaceX 和 UL
- 下一篇: 100个好听到爆的网名 个性昵称推荐