题目:

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;
}

  

POJ_2480 Longge's problem【积性函数+欧拉函数的理解与应用】的更多相关文章

  1. [poj 2480] Longge's problem 解题报告 (欧拉函数)

    题目链接:http://poj.org/problem?id=2480 题目大意: 题解: 我一直很欣赏数学题完美的复杂度 #include<cstring> #include<al ...

  2. HDU 6322.Problem D. Euler Function -欧拉函数水题(假的数论题 ̄▽ ̄) (2018 Multi-University Training Contest 3 1004)

    6322.Problem D. Euler Function 题意就是找欧拉函数为合数的第n个数是什么. 欧拉函数从1到50打个表,发现规律,然后勇敢的水一下就过了. 官方题解: 代码: //1004 ...

  3. 【poj2478-Farey Sequence】递推求欧拉函数-欧拉函数的几个性质和推论

    http://poj.org/problem?id=2478 题意:给定一个数x,求<=x的数的欧拉函数值的和.(x<=10^6) 题解:数据范围比较大,像poj1248一样的做法是不可行 ...

  4. poj 2480 Longge's problem 积性函数

    思路:首先给出几个结论: 1.gcd(a,b)是积性函数: 2.积性函数的和仍然是积性函数: 3.phi(a^b)=a^b-a^(b-1); 记 f(n)=∑gcd(i,n),n=p1^e1*p2^e ...

  5. bzoj 3944: Sum【莫比乌斯函数+欧拉函数+杜教筛】

    一道杜教筛的板子题. 两个都是积性函数,所以做法是一样的.以mu为例,设\( f(n)=\sum_{d|n}\mu(d) g(n)=\sum_{i=1}^{n}f(i) s(n)=\sum_{i=1} ...

  6. poj 2478 Farey Sequence(欧拉函数是基于寻求筛法素数)

    http://poj.org/problem?id=2478 求欧拉函数的模板. 初涉欧拉函数,先学一学它主要的性质. 1.欧拉函数是求小于n且和n互质(包含1)的正整数的个数. 记为φ(n). 2. ...

  7. HDU 3501【欧拉函数拓展】

    欧拉函数 欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) . 通式:φ(x)=x*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)-..(1- ...

  8. hdoj 1286 找新朋友【欧拉函数】

    找新朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  9. CF1114F Please, another Queries on Array?(线段树,数论,欧拉函数,状态压缩)

    这题我在考场上也是想出了正解的……但是没调出来. 题目链接:CF原网 题目大意:给一个长度为 $n$ 的序列 $a$,$q$ 个操作:区间乘 $x$,求区间乘积的欧拉函数模 $10^9+7$ 的值. ...

随机推荐

  1. memcache 加载(对象)所遇到的问题。资源

    <?php $mem =new memcache(); if($mem->connect('127.0.0.1','11211')){ echo '连接OK'.'<br>'; ...

  2. Mask_RCNN openpose AlphaPose Kinect姿态识别

    1.Mask_RCNN ---------------------------------------------------------------------------------------- ...

  3. keepalived+lvs高可用配置

    global_defs { notification_email { test@qq.com } notification_email_from sns-lvs@gmail.com smtp_serv ...

  4. win32 多线程 (五)Event

    Event是内核对象,他可以分为自动和手动两种模式. HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, BOOL bManual ...

  5. python pipelines 用法

    http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-pipelines.html http://blog.csdn.net/m ...

  6. 第八课 ROS的空间描述和变换

    1.tf的实际应用 1)在机器人的配置中 从上面可以看出激光雷达中心距离机器人底座的中心有20cm,激光雷达的中心距机器人底座中心有10cm,如果激光雷达在障碍物前面0.3米,那么机器人底座离障碍物多 ...

  7. 策略与计费控制规则(Policy and Charging Control Rule-PCC Rule)解析及模板样例

    内容 PCC规则定义 PCC规则运行 PCC规则模板 PCC规则定义 参考文档: 3gpp ts 23.203-be0 条款6.3 策略与计费控制规则(PCC Rule),即一系列相关信息与一系列相关 ...

  8. CentOS Vi编辑器

    vim:通过vim a.cfg进入文档 i:编辑状态 ESC:返回不可编辑状态 dd:在不可编辑状态下,dd可删除光标所在的行,2dd删除两行,以此类推 u:在不可编辑状态下,u可恢复删除的行 yy: ...

  9. GeoServer中GeoWebCache(GWC)的使用

    本文介绍GeoWebCache的使用方法,包括如何切缓存,访问缓存wms/wmts服务,如何复用栅格缓存等. 文章大部分内容转载自https://www.cnblogs.com/naaoveGIS/p ...

  10. 父级(display:none)隐藏时,子节点的高度获取。

    当父节点display:none的时候,子节点的高度是0获取不到. 解决办法:用visibility替换display就可以了.