数论GCD问题整理

Pro1 :Bzoj2705 Longge的问题

Description
Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。
Input
一个整数,为N。
Output
一个整数,为所求的答案。
Sample Input
6
Sample Output
15
HINT
【数据范围】

对于60%的数据,0< N<=2^16。
对于100%的数据,0< N<=2^32。

参考博客
code:

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int mxn=100000;
long long n,m;
long long phi(long long x){
    long long a=x;
    for(long long i=2;i<=m;i++){
        if(x%i==0){//找到因数 
            a=a/i*(i-1);//基本计算公式 a*=((i-1)/i) 
            while(x%i==0)x/=i;//除去所有相同因数 
        }
    }
    if(x>1)a=a/x*(x-1);//处理最后一个大因数 
    return a;
}
int main(){
    scanf("%lld",&n);
    m=sqrt(n);
    int i,j;
    long long ans=0;
    for(i=1;i<=m;i++){
        if(n%i==0){
            ans+=phi(n/i)*i;
            ans+=(n/i)*phi(i);
        }
    }
    printf("%lld\n",ans);
    return 0;
}

P2398 GCD SUM
题目描述
for i=(1 to n) for j=(1 to n) sum+=gcd(i,j)
给出n求sum. gcd(x,y)表示x,y的最大公约数.

输入输出格式
输入格式:
n

输出格式:
sum

输入输出样例
输入样例#1:
2
输出样例#1:
5
说明
数据范围 30% n<=3000 60% 7000<=n<=7100 100% n<=100000

这里写图片描述

注意到所有的gcd(x,n)的值都是n的约数,可以把这些约数分类,设g(n,i)表示满足条件为gcd(x,n)=i且x为正整数的x的个数
则f(n)=sigma{i*g(n,i),i为n的约数}
因为gcd(x,n)=i的充要条件为gcd(x/i,n/i)=1,因此满足条件的x/i有
phi(n/i)个(phi为欧拉函数),所以g(n,i)=phi(n/i)
再用前缀和递推出s[n]=f(2)+f(3)+…+f(n)

#include<cstdio>
#define LL long long
const int N=100050;
int prime[N],cnt=0,phi[N];
LL n,sum[N],ans=0;
void init()
{
    phi[1]=1;
    for(int i=2;i<=n;i++)
    {
        if (!phi[i]) prime[++cnt]=i,phi[i]=i-1;
        for(int j=1;j<=cnt;j++)
        {
            if (prime[j]*i>n) break;
            if (i%prime[j]==0)
            {
                phi[i*prime[j]]=phi[i]*prime[j];
                break;
            }
            else phi[i*prime[j]]=phi[i]*(prime[j]-1);
        }       
    }
    for(int i=1;i<=n;i++) sum[i]=sum[i-1]+phi[i];
}
int main()
{
    scanf("%lld",&n);
    init();
    for(LL i=1;i<=n;i++) 
        ans+=(sum[n/i]*2-1)*i;
    printf("%lld",ans);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/axuhongbo/article/details/82011977