题目:

Longge is good at mathematics and he likes to think about hard mathematical problems which will be solved by some graceful algorithms. Now a problem comes: Given an integer N(1 < N < 2^31),you are to calculate ∑gcd(i, N) 1<=i <=N.

"Oh, I know, I know!" Longge shouts! But do you know? Please solve it.

Input

Input contain several test case. 
A number N per line. 

Output

For each N, output ,∑gcd(i, N) 1<=i <=N, a line

Sample Input

2
6

Sample Output

3
15

题意分析:

做这题前,首先要对两个概念有一定的理解,积性函数和欧拉函数,浅层次的了解是无法推导出最终答案的,只有深入理解。(这完全是屁话- -!)

分析gcd是积性函数,当a,b互质时,易证

这样,我们也可以得出

也是积性函数。

然后我们分析N,如果一个数t,它与N的最大公约数2,即gcd(t,N)=2.那么我们可以得出

有没有发现什么,如果没有,回想欧拉函数的性质φ(N/2)的意义是不超过N/2的所有与N/2互素的数的数量。而这些与N/2互素的数字其实就是所有满足上述条件的t/2,再结合题目,那么φ(N/2)就是所有满足gcd(i,N)=2条件的数的数目。再乘以2就是这些数的和。3, 4, 5, ……依此类推。

现在我们往特殊的情况考虑,假设N是素数p。则

那么当N为p^r次方时,N的与i的最大公约数的值可能有1,p,p^2,……,p^r.

思路有没有变明朗呢?如果没有,那只能原谅我语文确实是体育老师教的。QAQ

直接拿出大招搞事了。

根据上述的公式,然后结合当为奇数次幂时的欧拉函数公式,直接推出

不得不吐槽下自己,自己在写代码时,因为装*,这个式子我又转换了一下,结果一直WA。看来还是要一步一步来啊。

接下来,玩玩拆数字游戏了,根据素数分解,把N分解成素数分解成素数幂相乘,再根据积性函数性质+上述推导的公式,最终结果就是答案了。写的时候注意下控制long long就可以了。

终于over了。

可以用素数打表再写(47ms),但是估计数据不多,直接试除速度更快(32ms)。

AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
typedef long long LL; void solve(LL N)
{
LL ans = 1;
for(LL i = 2; i*i <= N; i++)
{
if(N%i==0)
{
LL r = 0;
LL t = 1;
do
{
N/=i;
r++;
t*=i;
}while(N%i==0);
ans*=(r + 1) * t - t / i * r;
}
}
if(N>1)
{
ans*=2*N-1;
}
printf("%I64d\n", ans);
} int main()
{
LL N;
while(scanf("%I64d", &N) != EOF)
{
solve(N);
}
return 0;
}

  

最新文章

  1. 配置Samba共享服务器
  2. 带着问题学 Spring MVC 源码: 一、概述
  3. 我的电脑右下角的日期也不见了只剩下时间,Win7系统,请问是什么原因啊?
  4. objectARX判断当前坐标系
  5. @property @synthesize的含义以及误区。
  6. hdoj 5301 Buildings
  7. postgres 约束 多个条件 联合 约束
  8. android camera(三):camera V4L2 FIMC
  9. IP 转地址
  10. How to Avoid Producing Legacy Code at the Speed of Typing
  11. 详解Linq to SQL
  12. Linux 中 java 访问 windows共享目录
  13. Java 后端微信支付demo
  14. 用UIWebView加载本地图片和gif图
  15. iOS开发中的小技巧 - 多张图合成一张
  16. 优化网站设计(九):减少DNS查找的次数
  17. python low版线程池
  18. hibench 对CDH5.13.1进行基准测试(测试项目hadoop\spark\)HDFS作HA高可靠性
  19. vue-resource获取不了数据,和ajax的区别,及vue-resource用法
  20. MediaPlayer音乐播放器、上一首、下一首、播放、停止、自动下一首、进度条

热门文章

  1. LoadRunner Controller
  2. 409. Longest Palindrome 最长对称串
  3. 557. Reverse Words in a String III 翻转句子中的每一个单词
  4. mybatis 框架 的应用之三(操作两张没有关联的表,存在主键和外键关系)
  5. vmware 安装不成功导致的问题解决以及右键菜单添加打开终端命令
  6. linux ssh使用深度解析(key登录详解)
  7. mysql导入导出文本文件
  8. [GO]数组指针做函数参数
  9. New for ASP.NET Web Pages: Conditional attributes
  10. Orace开源的异步IO编程库,特点是接口非常简单