Cod sursa(job #984466)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 14 august 2013 16:20:07
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
#define IN "sumdiv.in"
#define OUT "sumdiv.out"
#define MODULO 9901
 
using namespace std;
 
ifstream in(IN);
ofstream out(OUT);
 
int A, B;
long long sDiv=1, p1, p2;
 
int pow(int n, int p)
{
    int sol=1;
    while(p)
    {
        if(p%2==1)
            sol = (1LL* sol * n ) % MODULO;
        n = (1LL* n * n ) % MODULO;
        p/=2;
    }
    return sol;
}
 
int main()
{
    in>>A>>B;
    for(int i=2; i*i <= A; i++)
    {
        if(A%i)
            continue;
        int p=0;
        while(A%i==0)
            p++,
            A/=i;
        p*=B;
        if(i%MODULO==1)
            sDiv =(sDiv*(p+1))%MODULO;
        else
        {
            p1=(pow(i,p+1)-1+MODULO)%MODULO;
            p2=pow(i-1,MODULO-2)%MODULO;
            sDiv = ( ( ( sDiv * p1 ) % MODULO ) * p2 ) % MODULO;
        }
    }
    if(A>1)
        if(A%MODULO==1)
            sDiv=(sDiv*(B+1))%MODULO;
        else
            sDiv=(sDiv*(pow(A,B+1)-1+MODULO)%MODULO*pow(A-1,MODULO-2))%MODULO;
    out<<sDiv<<'\n';
    in.close();
    out.close();
    return 0;
}