Cod sursa(job #405809)

Utilizator freak93Adrian Budau freak93 Data 28 februarie 2010 19:40:11
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>

using namespace std;

const char iname[]="sumdiv.in";
const char oname[]="sumdiv.out";
const long long mod=9901;

ifstream f(iname);
ofstream g(oname);

long long a,b,i,j,k,rez;

long long pow(long long x,long long y)
{
    if(y==1)
        return x%mod;
    long long v=pow(x,y>>1);
    v=v*v;
    v%=mod;
    if(y&1)
        return (v*x)%mod;
    return v;
}

int main()
{
    f>>a>>b;
    rez=1;
    for(i=2;i*i<=a;++i)
        if(a%i==0)
        {
            j=0;
            while(a%i==0)
            {
                ++j;
                a/=i;
            }
            k=((pow(i,j*b+1))-1);
            if(k<0)
                k+=mod;
            rez*=k;
            rez%=mod;
            rez*=pow(i-1,mod-2);
            rez%=mod;
        }
    if(a>1)
    {
        k=(pow(a,b+1)-1);
        if(k<0)
            k+=mod;
        rez*=k;
        rez%=mod;
        rez*=pow(a-1,mod-2);
        rez%=mod;
    }

    if(rez<0)
        rez+=mod;
    g<<rez<<"\n";

    f.close();
    g.close();

    return 0;
}