[题解](gcd/欧拉函数)luogu_P2568_GCD

Posted superminivan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[题解](gcd/欧拉函数)luogu_P2568_GCD相关的知识,希望对你有一定的参考价值。

求gcd(x,y)=p等价于求gcd(x/p,y/p)=1,转化为了n/p内互质的个数

所以欧拉函数,因为有序所以乘2,再特判一下只有在1,1情况下才会重复计算,所以每次都减一

数组开小一时爽,提交wa火葬场!!!

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=10000009;
int n;
int ck[maxn],prime[maxn],phi[maxn],tot;
long long sum[maxn];
void eular(int n){
    phi[1]=1;
    for(int i=2;i<=n;i++){
        if(!ck[i]){
            ck[i]=i,prime[++tot]=i;
            phi[i]=i-1;
        }
        for(int j=1;j<=tot;j++){
            if(prime[j]>ck[i] || i*prime[j]>n)break;
            ck[prime[j]*i]=prime[j];
            phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-1:prime[j]);
        }
    }
}
int main(){
    scanf("%d",&n);
    eular(n);
    for(int i=1;i<=n;i++)sum[i]=sum[i-1]+phi[i];
    long long ans=0;
    for(int i=1;i<=tot;i++){
        ans+=2*sum[n/prime[i]]-1;
    }
    printf("%lld\n",ans);
}

 

以上是关于[题解](gcd/欧拉函数)luogu_P2568_GCD的主要内容,如果未能解决你的问题,请参考以下文章

[luogu P2586] GCD 解题报告 (莫比乌斯反演|欧拉函数)

bzoj 2818 GCD 数论 欧拉函数

BZOJ2818 Gcd 欧拉函数

luogu P1592 互质(欧拉函数)

Luogu_P1516题解青蛙的约会 exgcd

luogu P2568 GCD