【洛谷题解】P2303 [SDOi2012]Longge的问题

题目传送门:链接

能自己推出正确的式子的感觉真的很好!

题意简述:

求\(\sum_{i=1}^{n}gcd(i,n)\)。\(n\leq 2^{32}\)。

题解:

我们开始化简式子:

\(\sum_{i=1}^{n}gcd(i,n)\)

\(=\sum_{j=1}^{n}\left(j\times\sum_{i=1}^{n}\left[gcd(i,n)=j\right]\right)\)

\(=\sum_{j=1}^{n}\left(j\times\sum_{i=1}^{n}\left[gcd(i/j,n/j)=1\right]\left(j|i,j|n\right)\right)\)

\(=\sum_{j=1}^{n}\left(j\times\varphi\left(n/j\right)\left(j|n\right)\right)\)

\(=\sum_{j|n}\left(j\times\varphi\left(n/j\right)\right)\)

到这里就可以直接计算了。

但是还可以进一步化简!(以下的\(p\)为质数)

\(\sum_{j|n}(j\times\varphi(n/j))\)

\(=\sum_{j|n}(n/j\times\varphi\left(j\right))\)

\(=\sum_{j|n}(n/j\times(j\cdot\prod_{p|j}\frac{p-1}{p}))\)

\(=\sum_{j|n}(n\cdot\prod_{p|j}\frac{p-1}{p})\)

\(=n\times\sum_{j|n}\prod_{p|j}\frac{p-1}{p}\)

接下来我们令\(n=p_1^{b_1}p_2^{b_2}p_3^{b_3}\cdots p_k^{b_k}\),并定义\(f_i=\frac{p_i-1}{p_i}\)。

那么\(n\)的因子\(j\)可以表示为:\(j=p_1^{c_1}p_2^{c_2}p_3^{c_3}\cdots p_k^{c_k}\),满足\(0\leq c_i\leq b_i\)。

那么\(\prod_{p|j}\frac{p-1}{p}=\prod_{i=1}^kf_i[c_i>0]\)。

我们观察一类\(\prod_{i=1}^kf_i[c_i>0]\)相等的\(j\),它们必要满足在\(i\)相等的情况下,\(c_i\)同时大于0或\(c_i\)同时等于0。

那么这一类的\(j\)有多少个呢?如果这类\(j\)有质因子\(p_{q_1},p_{q_2},p_{q_3},\cdots,p_{q_g}\)。

那么这类\(j\)的答案为\(\prod_{i=1}^gf_{q_i}\),而个数为\(\prod_{i=1}^gb_{q_i}\)。

\(b_i\)就是原来\(n\)的质因数分解的指数。

那么对答案的贡献为:\(\prod_{i=1}^g\chi_{q_i}\)。这里\(\chi_i=f_i\cdot b_i\)。

发现每一个质因子的贡献都是独立的,那么最后我们枚举\(n\)的每一个质因子取不取,得到最后的答案:\(n\cdot\prod_{i=1}^{k}(\chi_i+1)\)。

举个例子:如果\(n\)只有\(3\)个质因子,那么答案为\(n\cdot(1+\chi_1+\chi_2+\chi_3+\chi_1\chi_2+\chi_1\chi_3+\chi_2\chi_3+\chi_1\chi_2\chi_3)\)。

显然可以化简为:\(n\cdot(\chi_1+1)\cdot(\chi_2+1)\cdot(\chi_3+1)\)。

当然可以类比到质因数更多的情况。

总之,答案就是:\(n\cdot\prod_{i=1}^{k}\frac{b_i\cdot p_i-b_i+p_i}{p_i}\)。

代码:

 1 #include<cstdio>
 2 long long n;
 3 long long f(){
 4     long long ans=n; long long i;
 5     for(i=2;i*i<=n;++i) if(n%i==0){
 6         int b=0;
 7         while(n%i==0) ++b,n/=i;
 8         ans/=i;
 9         ans*=b*i-b+i;
10     } if(n>1) ans/=n, ans*=n+n-1;
11     return ans;
12 }
13 int main(){
14     scanf("%lld",&n);
15     printf("%lld",f());
16     return 0;
17 }

原文地址:https://www.cnblogs.com/PinkRabbit/p/8278728.html

时间: 2024-10-10 15:11:43

【洛谷题解】P2303 [SDOi2012]Longge的问题的相关文章

P2303 [SDOi2012]Longge的问题

题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). 输入输出格式 输入格式: 一个整数,为N. 输出格式: 一个整数,为所求的答案. 输入输出样例 输入样例#1: 6 输出样例#1: 15 说明 对于60%的数据,0<N<=2^16 对于100%的数据,0<N<=2^32 Solution: 本题数学. 设$f(x)$表示范围内$gcd(i,j)=x$的数的个数,

我的洛谷题解

2018.2.4 P1217[USACO1.5]回文质数 Prime Palindromes] 2018.2.6  P1308 [统计单词数] 链接 持续更新中 原文地址:https://www.cnblogs.com/SocietyNiu/p/8425725.html

洛谷3258:[USACO2012 MAR]Flowerpot 花盆——题解

https://www.luogu.org/problemnew/show/P2698#sub 老板需要你帮忙浇花.给出N滴水的坐标,y表示水滴的高度,x表示它下落到x轴的位置. 每滴水以每秒1个单位长度的速度下落.你需要把花盆放在x轴上的某个位置,使得从被花盆接着的第1滴水开始,到被花盆接着的最后1滴水结束,之间的时间差至少为D. 我们认为,只要水滴落到x轴上,与花盆的边沿对齐,就认为被接住.给出N滴水的坐标和D的大小,请算出最小的花盆的宽度W. 单调队列好题,参考洛谷题解. emm……显然是

BZOJ4943 &amp; 洛谷3823 &amp; UOJ315:[NOI2017]蚯蚓排队——题解

https://www.lydsy.com/JudgeOnline/problem.php?id=4943 http://uoj.ac/problem/315 https://www.luogu.org/problemnew/show/P3823#sub 题面太长自己看吧orz. 参考:洛谷题解. 用链表暴力维护每个蚯蚓,每次合并和分离只对k*k的元素有影响,哈希一下存起来query时候比较就好了. 没了. (具体复杂度我不会证明,以及bzoj卡空间,正常的哈希表空间总觉得不能开如代码所示的这么

【洛谷P2261】[CQOI2007]余数求和

题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值,其中k mod i表示k除以i的余数.例如G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 -- + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29 输入输出格式 输入格式: 两个整数n k 输出格式: 答案 输入输出样例 输入样例#1: 10 5 输出样例

洛谷 P2764 LibreOJ 6002 最小路径覆盖问题

题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V 中每个顶点恰好在P 的一条路上,则称P是G 的一个路径覆盖.P 中路径可以从V 的任何一个顶点开始,长度也是任意的,特别地,可以为0.G 的最小路径覆盖是G 的所含路径条数最少的路径覆盖.设计一个有效算法求一个有向无环图G 的最小路径覆盖.提示:设V={1,2,.... ,n},构造网络G1=(V1,E1)如下: 每条边的容量均为1.求网络G1的( 0 x , 0 y )最大流. «编程任务:

洛谷P1220 关路灯

洛谷1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯.    为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电.他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯.开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大

【洛谷P1641】[SCOI2010]生成字符串

题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗? 输入输出格式 输入格式: 输入数据是一行,包括2个数字n和m 输出格式: 输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数 输入输出样例 输入样例#1: 2 2 输出样例#1:

洛谷p1732 活蹦乱跳的香穗子 二维DP

今天不BB了,直接帖原题吧  地址>>https://www.luogu.org/problem/show?pid=1732<< 题目描述 香穗子在田野上调蘑菇!她跳啊跳,发现自己很无聊,于是她想了一个有趣的事情,每个格子最多只能经过1次,且每个格子都有其价值 跳的规则是这样的,香穗子可以向上下左右四个方向跳到相邻的格子,并且她只能往价值更高(这里是严格的大于)的格子跳. 香穗子可以从任意的格子出发,在任意的格子结束, 那么她最多能跳几次? 输入输出格式 输入格式: 第一行n,m,