zoukankan      html  css  js  c++  java
  • 【BZOJ2705】【SDOI2012】Longge的问题

    啥都不会只能学数论QAQ

    原题:

    Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。

    0<N<=2^32

    先知道是欧拉函数,然后照着反演推了半天,越推越鬼畜,然后gg看题解……

    数论嘛,推公式:

    对就这么简单

    然后O(√n)求欧拉函数即可,其实就是用通式暴力计算……φ(x)=x*(1-1/p1)*(1-1/p2)*(1-1/p3)*(1-1/p4)…..(1-1/pn)

    注意暴力计算的时候不能用积性性质,因为欧拉函数的积性要求互质

    代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 using namespace std;
     7 #define ll long long
     8 ll n,m;
     9 ll phi(ll x){
    10     ll tmp=x;
    11     for(int i=2;i<=m;++i)if(!(x%i)){
    12         tmp=tmp/i*(i-1);
    13         while(!(x%i))  x/=i;
    14     }
    15     if(x>1)  tmp=tmp/x*(x-1);
    16     return tmp;
    17 }
    18 int main(){//freopen("ddd.in","r",stdin);
    19     cin>>n;
    20     m=(ll)sqrt(n*1.0);
    21     ll ans=0;
    22     for(int i=1;i<=m;++i)if(!(n%i)){
    23         ans+=(ll)i*phi(n/i);
    24         if(i*i<n)  ans+=(ll)(n/i)*phi(i);
    25     }
    26     cout<<ans<<endl;
    27     return 0;
    28 }
    View Code
  • 相关阅读:
    xss攻击和csrf攻击的定义及区别
    php中Redis的扩展
    MySQL事务特性
    PHP的设计模式
    http协议
    sql语句的优化
    mysql存储引擎
    laravel框架安装Curl扩展
    laravel框架中安装 elasticsearch 包
    docker容器配置nginx负载均衡 -----加权
  • 原文地址:https://www.cnblogs.com/JSL2018/p/6911489.html
Copyright © 2011-2022 走看看