Cod sursa(job #905566)

Utilizator lianaliana tucar liana Data 5 martie 2013 22:06:09
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#define modulo 9901
long long pd, x, a, b, px, d, rez, i;

long long sum(long p)
{
    long long a;
    if (p==0)
    {   px=1;   return 1;   }
    else
    {
        a=sum((p+1)/2-1);
        a=(a+a*px*x)%modulo;
        px=px*px;
        for (i=((p+1)/2-1)*2+1;i<=p;i++)
            px=(px*x)%modulo;
        if (p%2==0)
            a=(a+px)%modulo;
        return a;
    }
}
void calculare()
{
    pd=pd*b;    x=d%modulo;
    rez=(rez*sum(pd))%modulo;
}

void rezolvare()
{
    d=2;
    while (d*d<=a)
    {
        pd=0;
        while (a%d==0)
        {   pd++;   a/=d;   }
        calculare();
        d++;
    }
    if (a>1)
    {
        pd=b;   x=a%modulo;
        rez=(rez*(sum(pd)))%modulo;
    }
    printf("%ld",rez);
}

int main()
{
    freopen("sumdiv.in","r",stdin);
    freopen("sumdiv.out","w",stdout);
    scanf("%ld %ld",&a,&b);
    rez=1;
    rezolvare();
    return 0;
}