数论专题 hdu1452

  本题题意:求2004^X的因子和。

  代码如下:

  

#include <cstdio>
using namespace std;
const int MAX = 10000000;
const int mod = 29;
typedef long long ll;
int a[MAX+1];
int num[] = {2,3,167};
int t[3] = {2,1,1};
ll me(ll a,ll p)
{
        ll base = a,sum = 1;
        while(p)
        {
                if(p&1)sum=sum*base%mod;
                base = base * base % mod;
                p >>= 1;
        }
        return sum % mod;
}
ll inv(int a,int p)
{
        return me(a,p-2)%p;
}
ll g(int prime,int e)
{
        return (me(prime,e+1)-1)*inv((prime-1),mod);
}
ll calculate(int a,int b,int c)
{
        return g(2,a) * g(3,b) * g(167,c)%mod;
}
int main()
{
        int X;
        while(scanf("%d",&X)&&X)
        {
                printf("%lld\n",calculate(X*t[0],X*t[1],X*t[2]));
        }
        return 0;       
}

这道题又是一个公式题,任意数n都能化成 p1^e1*p2^e2*...pn^en的形式,其中pi为第i个素数,ei为pi出现的次数,然后n又可以化成p1^e1*n'。(n'即除了p1外其他素数的乘积)。

posted @ 2017-09-13 17:19  mtl6906  阅读(78)  评论(0编辑  收藏  举报