Cod sursa(job #405896)

Utilizator DraStiKDragos Oprica DraStiK Data 28 februarie 2010 21:26:07
Problema Suma divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <algorithm>
#include <vector>
#include <bitset>
using namespace std;

#define pb push_back
#define MOD 9901

int n,m,sd;


int lgput (int n,int p)
{
    int rez;

    n%=MOD;
    for (rez=1; p; p>>=1)
    {
        if (p&1)
            rez=(rez*n)%MOD;
        n=(n*n)%MOD;
    }

    return rez;
}

void solve ()
{
    int i,exp;

    sd=1;
    for (i=2; i*i<=n; ++i)
        if (n%i==0)
        {
            for (exp=0; n%i==0; n/=i)
                ++exp;
            if (i%MOD==1)
                sd=(sd*(exp*m+1))%MOD;
            else
                sd=((sd*(lgput (i,exp*m+1)+MOD-1)%MOD)*lgput (i-1,MOD-2))%MOD;
        }
    printf ("%d",sd);
}

int main ()
{
    freopen ("sumdiv.in","r",stdin);
    freopen ("sumdiv.out","w",stdout);

    scanf ("%lld%lld",&n,&m);
    solve ();

    return 0;
}