Longge's problem

求\(\sum_{i=1}^ngcd(i,n)\),\(n< 2^{31}\)。

理解1:

注意式子的实际意义,显然答案只可能在n的约数中,而现在问题变成了每个约数出现了几次,而一个约数d要出现的次数,自然需要这个数有约数d,其他的约数与之互斥,于是考虑欧拉函数,故我们有

\[ans=\sum_{d|n}\varphi(n/d)d
\]

以此枚举n的约数爆算即可,时间复杂度不难得知为\(O(\sigma(n)\sqrt{n})\)。

理解2:

约数计数问题,考虑反演,于是有

\[ans=\sum_{d=1}^nd\sum_{i=1}^n(gcd(i,n)==d)
\]

\[f(d)=\sum_{i=1}^n(gcd(i,n)==d)
\]

\[F(d)=[n/d](d|n)
\]

由Mobius反演定理,带入原式我们有

\[ans==\sum_{d=1}d\sum_{d|x,x|n}[n/x]\mu(x/d)=
\]

\[\sum_{x|n}[n/x]\sum_{d|x}d\mu(x/d)=\sum_{x|n}[n/x]\varphi(x)
\]

同理解1做法即可。

于是我们可以小结一下,同排列组合一样,约数计数问题,也有它的实际意义的理解,两者侧重点不同,一个侧重思维,一个侧重代数变换,但是殊途同归,而且不难得知最后的答案其实就是\(\varphi *id\),我们可以使用杜教筛对之优化,数据范围可以出到\(10^{11}\),但无论如何,重点都在于对于约数的巧妙的理解。

参考代码:

#include <iostream>
#include <cstdio>
#define il inline
#define ri register
#define ll long long
using namespace std;
il ll Phi(ll);
int main(){
ll ans,n,i;
while(scanf("%lld",&n)!=EOF){
for(ans&=0,i=1;i*i<n;++i)
if(!(n%i)){
ans+=(n/i)*Phi(i);
ans+=(i)*Phi(n/i);
}
if(i*i==n)ans+=i*Phi(i);
printf("%lld\n",ans);
}
return 0;
}
il ll Phi(ll n){
ri ll i,ans(n);
for(i=2;i<=n/i;++i)
if(!(n%i)){
(ans/=i)*=(i-1);
while(!(n%i))n/=i;
}if(n>1)(ans/=n)*=(n-1);
return ans;
}

Longge's problem的更多相关文章

  1. Longge's problem poj2480 欧拉函数,gcd

    Longge's problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6918   Accepted: 2234 ...

  2. POJ2480 Longge's problem

    题意 Language:Default Longge's problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1064 ...

  3. poj 2480 Longge's problem 欧拉函数+素数打表

    Longge's problem   Description Longge is good at mathematics and he likes to think about hard mathem ...

  4. POJ 2480 Longge's problem 欧拉函数—————∑gcd(i, N) 1<=i <=N

    Longge's problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6383   Accepted: 2043 ...

  5. poj2480——Longge's problem(欧拉函数)

    Longge's problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9190   Accepted: 3073 ...

  6. poj 2480 Longge's problem [ 欧拉函数 ]

    传送门 Longge's problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7327   Accepted: 2 ...

  7. Longge's problem(欧拉函数应用)

    Description Longge is good at mathematics and he likes to think about hard mathematical problems whi ...

  8. POJ_2480 Longge's problem【积性函数+欧拉函数的理解与应用】

    题目: Longge is good at mathematics and he likes to think about hard mathematical problems which will ...

  9. 题解报告:poj 2480 Longge's problem(欧拉函数)

    Description Longge is good at mathematics and he likes to think about hard mathematical problems whi ...

随机推荐

  1. jvm-多线程

    多线程的目的 为什么要使用多线程?可以简单的分两个方面来说: 在多个cpu核心下,多线程的好处是显而易见的,不然多个cpu核心只跑一个线程其他的核心就都浪费了: 即便不考虑多核心,在单核下,多线程也是 ...

  2. Linux下同一目录内文件和目录为什么不能同名?

    问题描述: 如果事先有叫‘A’的文件夹存在,则不允许建立叫‘A’的文件: 同理若先有叫‘b’的文件存在,一样不允许建立叫‘b’的文件夹. 原因很简单,因为Linux下一切都是文件,一个目录归根到底还是 ...

  3. PAT_A1064#Complete Binary Search Tree

    Source: PAT A1064 Complete Binary Search Tree (30 分) Description: A Binary Search Tree (BST) is recu ...

  4. Ulimit 文件配置

    cat /etc/security/limits.confsudo vim /etc/security/limits.conf * hard nofile 999999 * soft nofile 9 ...

  5. 关于SQL server2017无法连接远程服务器的问题

    安装了SQL server2017,能连接上本地数据库,但是连接远程数据库则老报错,什么实例错误之类的,百度找了也是什么打开sql server 服务,什么修改端口1433,什么TCP协议之类的,全部 ...

  6. 如何理解 if __name__ == "__main__"

    小明.py 朋友眼中你是小明(__name__ == '小明'), 你自己眼中你是你自己(__name__ == '__main__'), 你编程很好, 朋友调你去帮他写程序(import 小明, 这 ...

  7. 【luoguP4721】分治 FFT

    description 给定长度为\(n-1\)的数组\(g[1],g[2],..,g[n-1]\),求\(f[0],f[1],..,f[n-1]\),其中 \[f[i]=\sum_{j=1}^if[ ...

  8. CSS——垂直居中

    vertical-align 垂直对齐 以前我们讲过让带有宽度的块级元素居中对齐,是margin: 0 auto; 以前我们还讲过让文字居中对齐,是 text-align: center; 但是我们从 ...

  9. JS请求服务器,并返回信息,请求过程中不需要跳转页面

    js请求服务器,并返回信息,请求过程中不需要跳转页面 这个可以通过jQuery框架轻松实现,jQuery中包含多种ajax的请求方式,详细可以参考下对应 的API. 你上面定义的按钮类型是submit ...

  10. C++——类的多继承

    多继承概念 一个类有多个直接基类的继承关系称为多继承 多继承声明语法 class  派生类名 : 访问控制  基类名1 ,  访问控制  基类名2 ,  … , 访问控制  基类名n { 数据成员和成 ...