公约数的和(数论,欧拉函数)

来源:互联网 发布:手机淘宝如何申请贷款 编辑:程序博客网 时间:2024/05/26 17:47

接下来我们来看看几道数论的题目。
这里写图片描述
这里写图片描述

代码

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>using namespace std;long long n,i,j,m,k;long long f[2000001];long long r(){    long long p=0,f=1;    char c=getchar();    while(c<'0'||c>'9')    {        if(c=='-')        {            f=-1;        }        c=getchar();    }    while(c>='0'&&c<='9')    {        p=p*10+c-'0';        c=getchar();    }    return p*f;}long long sum=0;int gcd(int a,int b){    if(b==0) return a;    return gcd(b,a%b);}long long phi(long long x){    for(i=2;i<=x;i++)    {        if(!f[i])        for(j=i;j<=x;j+=i)        {            if(!f[j])            f[j]=j;            f[j]=f[j]/i*(i-1);        }    }}long long ans;int main(){    n=r();    phi(n);    for(i=1;i<=n/2;i++)    for(j=i*2;j<=n;j+=i)    {        ans+=f[j/i]*i;    }    cout<<ans;    return 0;}/*520 130 50 60 40 81*/

这里写图片描述

原创粉丝点击