poj 2480

原创 2012年03月28日 17:56:49

设函数g(n) = gcd(i,n) (1<=i<=n),由积性函数的定义,g(n)=g(m1)*g(m2) (n=m1*m2 且 (m1, m2)= 1),所以g是积性函数。由具体数学上的结论,积性函数的和也是积性的。所以f(n) = ∑gcd(i, n)也是积性函数。由初等数论中的定理,如果f(n)是不恒为0的数论函数,n>1时 n=p1^a1*p2^a2*...*ps^as,那么f(n)是积性函数的充要条件是f(1)=1,及f(n) = f(p1^a1)*f(p2^a2)*...f(pr^ar)。所以只要求f(pi^ai)就好,如果d是n的一个约数,那么1<=i<=n中gcd(i,n) = d的个数是phi(n/d),即n/d的欧拉函数

f(pi^ai) =  Φ(pi^ai)+pi*Φ(pi^(ai-1))+pi^2*Φ(pi^(ai-2))+...+pi^(ai-1)* Φ(pi)+ pi^ai *Φ(1)

     = pi^(ai-1)*(pi-1) + pi*pi^(ai-2)*(pi-1)....+pi^ai

     =  pi^ai*(1+ai*(1-1/pi))

f(n) = p1^a1*p2^a2...*pr^ar*(1+a1*(1-1/p1))*(1+a2*(1-1/p2))*...

       =  n*(1+a1*(1-1/p1))*(1+a2*(1-1/p2))*...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>

using namespace std;

typedef __int64 lint;


int main()
{
    lint n;
    while (scanf("%I64d", &n) != EOF) {
        lint i, sqr, p, a, ans;
        ans = n;
        sqr = floor(sqrt(n*1.0));
        for (i = 2; i <= sqr; ++i) {
            if (n%i == 0) {
                a = 0;
                p = i;
                while (n%p == 0) {
                    a++;
                    n /= p;
                }
                ans = ans + ans*a*(p-1)/p;
            }
        }
        if (n!=1) {
            ans = ans + ans*(n-1)/n;
        }
        printf("%I64d\n", ans);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

组合数学 C(n,k)

求C(n,k)的方法很多,这里只介绍打表的方法.递推式:C(n,k) = C(n-1,k-1) + C(n-1,k)代码:#include using namespace std; const ...

开发Wap 中的随笔

以下是在开发wap中的随笔,其中一些对于“老鸟”来说,谈不上什么,希望对初学者有所帮助,大家有什么小技巧,欢迎顶上来。共同学习、共同进步 ^-^1、iis配置Wap环境在作为wap站点的属性-->Ht...

hdoj Integer’s Power

来源:2009 Shanghai Invitation Contest Host by DHU 思路:sum[a, b] = sum[2, b] - sum[2,a-1]. 枚举指数i,计算出...

hdoj Buy the Ticket

算法分析: 首先假设人无区别 令f(m,n)表示有m个人手持¥50的钞票,n个人手持¥100的钞票时共有的方案总数。则可以分以下情况讨论这个问题: (1)当n=0时   n=0意味着排队购票的所...

HDU 5528 Count a × b 纪念长春站的遗憾

18日的长春现场赛已经过去4天。虽然说拿到学校的首届银牌还是很值得高兴的,但B题作为这场比赛唯一的数论题,由于时间不够未能AC我实在是感到遗憾。最后半个小时我只推公式推到了sqrt分解log求约数再处...

HDU 5528(Count a * b-反演)

已知f(n)=∑0<=i<n∑0<=j<n[ij(modn)≠0]f(n)=\sum_{0<=i<n}\sum_{0<=j<n}[ij\pmod n\ne 0] 求g(n)=∑m|nf(m)g(n)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)