zoukankan      html  css  js  c++  java
  • 51nod 1040 最大公约数之和

    给出一个n,求1-n这n个数,同n的最大公约数的和。比如:n = 6
    1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15
     
    Input
    1个数N(N <= 10^9)
    Output
    公约数之和
    Input示例
    6
    Output示例
    15
    —————————————————————————
    这道题枚举 约数d 约数的贡献就是
       $sum_{d|n}phi(frac{n}{d})d$
     因为和n的最大公约数是d的 除以d之后就一定是和n/d 互质的
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define LL long long
    using namespace std;
    int v,n,h[2507],cnt;
    LL ans;
    LL f(int x){
        for(int i=1;i<=cnt;i++)if(x%h[i]==0)x=x/h[i]*(h[i]-1);
        return x;
    }
    int main(){
        scanf("%d",&n); v=n;
        for(int i=2;i*i<=v;i++)if(v%i==0){
            h[++cnt]=i;
            while(v%i==0) v=v/i;
        }
        if(v!=1) h[++cnt]=v; 
        for(int i=1;i*i<=n;i++)if(n%i==0){
            int j=n/i;
            ans+=f(i)*j;
            if(i!=j) ans+=f(j)*i;
        }printf("%lld
    ",ans);
        return 0;
    }
    View Code
  • 相关阅读:
    移动端 app
    python 3.8 新特性
    vue 路由歪招
    VUE 关于组件依赖的问题
    vue 全局注册组件
    CSS小技巧
    vue踩坑记 页面跳转不新
    vuecli eslint 语法错误解决办法
    vue v-slot用法测试
    终止 IdFtp下载
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7444561.html
Copyright © 2011-2022 走看看