hdoj 1452 Happy 2004 所有因子求和

原创 2012年03月24日 17:54:19

思路: 任意一个大于2的数都可以写成素因子乘积的形式,对于2004 = 2*2*3*167;

因子和 s是积性函数,即 :gcd(a,b)=1==> s(a*b)= s(a)*s(b)  2004^X=2^2X * 3^X *167^X,  s(2004^X)=  s(2^(2X))* s(3^X) * s(167^X)

如果 p是素数 ==> s(p^X)=1+p+p^2++p^X = (p^(X+1)-1) /(p-1)

至此,s(2004^X)=(2^(2X+1)-1)* (3^(X+1)-1)/2  *(167^(X+1)-1)/166

另外, (a/c)%m = a%m*d, 其中d*c = 1mod(29).且d满足最小。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int num[3]={2,1,1}, prime[3]={2,3,167};
int tnum[3];

int getvalue(int k) {
    int tmp, tk, v;
    tk = tnum[k]+1;
    tmp = prime[k];
    v = 1;
    while (tk) {
        if (tk&1)
            v = (v*tmp)%29;
        tmp = (tmp*tmp)%29;
        tk >>= 1;
    }
    return v;
}

int getd(int c)
{
    int tmp, t;
    tmp = c;
    t = tmp;
    while (tmp%29 != 1)
        tmp += t;
    return tmp/c;
}
int main()
{
    int i, x, d1, d2;
    while (scanf("%d", &x) != EOF && x) {
        memcpy(tnum, num, sizeof(tnum));
        for (i = 0; i < 3; ++i)
            tnum[i] *= x;
        int a[3];
        for (i = 0; i < 3; ++i) {
            a[i] = getvalue(i);
        }
        d1 = getd(2);
        d2 = getd(166);
        printf("%d\n", ((a[0]-1)*(a[1]-1)*d1*(a[2]-1)*d2)%29);
    }
    return 0;
}



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

相关文章推荐

HDU 1452 Happy 2004 (因子和)

Happy 2004 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total ...

[数论]HDU 1452 Happy 2004 素因子分解+快速幂模+乘法逆元

传送门:Happy 2004 Happy 2004 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

Happy 2004&&http://acm.hdu.edu.cn/showproblem.php?pid=1452

Total Submission(s): 609 Accepted Submission(s): 431 Problem Description Consider a positive i...

hdu1452Happy 2004(乘性函数+费马小定理+求逆元)

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1452 题意:让你求2004^x次方的因子的个数。 思路:首先,先要想到求解正整数正因数和的公式!!!分...

hdu 1452 happy 2004

设S(x)表示x的因子和。则题目求为:S(2004^X)mod 29 因子和S是积性函数,即满足性质1。 这题还需用到简单的快速幂不然会超时。 性质1 :如果 gcd(a,b)=1  则 S(a...

G - Happy 2004------(HDU 1452)

算术基本定理 + 扩展欧几里得算法 + 快速幂

【原创】【数论】HDU-1452 Happy 2004(约数和定理)

Happy 2004 HDU - 1452题目描述descriptionConsider a positive integer X,and let S be the sum of all positi...

hdu 1452 Happy 2004(数论(模P乘法逆元+快速幂取模))

2004=2^2*3*167。 f[1]=2^2,f[2]=3,f[3]=167三者两两互质。2004所有因子的情况:(1+2+2^2)*(1+3)*(1+167)。所以2004的因子个数和就是3*2...

HDU 1452 Happy 2004(积性函数 逆元)

数学题就是99%的时间在纸上1%的时间写代码。       Orz...       不难得出sum = ((p1^x)-1) / (p1 - 1) * ((p2^x)-1) / (p2 - 1) *...

hdu 1454 Happy 2004(数论,分解因子,乘法逆元,快速幂取模)

Happy 2004 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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