zoukankan      html  css  js  c++  java
  • 关于1-n任意的gcd的和

    gcd和

    题目

    GCD sum
    公约数的和
    大意是让你求1-n任意两个数的gcd的和之类的。

    解法

    显然你需要枚举对吧,不然你怎么可能求出gcd呢?
    其次我们需要一些数学推理
    令F(n)表示(sum_{i=1}^{n}gcd(1,n))
    则我们只需要求出(2 imes sum_{i=1}^{n}F(i) + sum_{i=1}^{n}i)对吧。
    那么成立的充要条件是(gcd(a/d,b/d)=1),则我们就知道(gcd(a/d,b/d)*d=gcd(a,b))
    那么所以我们需要求出有多少个1-n/d的互质的数,显然这就是欧拉函数
    所以我们就有了如下两道题目代码

    //code 1
    #include<bits/stdc++.h>
    #define int long long //还是自觉换long long 更好吧
    using namespace std;
    const int maxn=100000+5;
    int phi[maxn];
    int f[maxn];
    int s[maxn];
    void get(int n) {
        for(int i=2; i<=n; i++) phi[i]=0;
        phi[1]=1;
        for(int i=2; i<=n; i++) {
            if(!phi[i]) {
                for(int j=i; j<=n; j+=i) {
                    if(!phi[j]) phi[j]=j;
                    phi[j]=phi[j]/i*(i-1);
                }
            }
        }
    }
    main() {
        int n;
        cin>>n;
        get(n);
        for(int i=1; i<=n; i++)
            for(int j=i*2; j<=n; j+=i)
                f[j]+=i*phi[j/i];
        for(int i=1; i<=n; i++) s[i]=s[i-1]+f[i];
        cout<<s[n]*2+(1+n)*n/2;
        return 0;
    }
    
    //code 2
    #include<bits/stdc++.h>
    #define int long long //还是自觉换long long 更好吧
    using namespace std;
    const int maxn=2000000+5;
    int phi[maxn];
    int f[maxn];
    int s[maxn];
    void get(int n) {
        for(int i=2; i<=n; i++) phi[i]=0;
        phi[1]=1;
        for(int i=2; i<=n; i++) {
            if(!phi[i]) {
                for(int j=i; j<=n; j+=i) {
                    if(!phi[j]) phi[j]=j;
                    phi[j]=phi[j]/i*(i-1);
                }
            }
        }
    }
    main() {
        int n;
        cin>>n;
        get(n);
        for(int i=1; i<=n; i++)
            for(int j=i*2; j<=n; j+=i)
                f[j]+=i*phi[j/i];
        for(int i=1; i<=n; i++) s[i]=s[i-1]+f[i];
        cout<<s[n];
        return 0;
    }
    
  • 相关阅读:
    洛谷 P1226 【模板】快速幂||取余运算 题解
    洛谷 P2678 跳石头 题解
    洛谷 P2615 神奇的幻方 题解
    洛谷 P1083 借教室 题解
    洛谷 P1076 寻宝 题解
    洛谷 UVA10298 Power Strings 题解
    洛谷 P3375 【模板】KMP字符串匹配 题解
    Kafka Shell基本命令
    Mybatis与Hibernate的详细对比
    MyBatis简介
  • 原文地址:https://www.cnblogs.com/ifmyt/p/9886203.html
Copyright © 2011-2022 走看看