Cod sursa(job #290173)

Utilizator flamecataCiobanu Alexandru-Catalin flamecata Data 27 martie 2009 16:33:20
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda aa Marime 1.2 kb
#include<stdio.h>   
long long int a,b,baza[50],expo[50],nf,i,bb,ee,sol=1,p,sc,j;   
void readd(),factorizare(),solve();   
int main()   
{   
    readd();   
    if(!b){printf("1");return 0;}   
    factorizare();   
    solve();   
    return 0;   
}   
void readd()   
{   
    freopen("sumdiv.in","r",stdin);   
    freopen("sumdiv.out","w",stdout);   
    scanf("%lld%lld",&a,&b);   
}   
void factorizare()   
{   
    if(a%2==0)   
    baza[++nf]=2;   
    while(a%2==0){expo[nf]++;a/=2;}   
    for(i=3;i<8000;i+=2)   
     if(a%i==0)   
     { baza[++nf]=i;   
       while(a%i==0){expo[nf]++;a/=i;}   
     }   
    if(a>1){baza[++nf]=a;expo[nf]=1;}   
}   
void solve()   
{   
    for(i=1;i<=nf;i++)   
    { bb=baza[i];ee=expo[i];   
      ee*=b;   
      bb%=9901;   
      if(bb>1)   
      { ee%=9900;   
        if(!ee){sol=0;return;}   
        p=1;sc=1;for(j=1;j<=ee;j++){p=(p*bb)%9901;sc+=p;}   
        sc%=9901;   
        sol*=sc;   
        sol%=9901;   
      }   
      if(bb==1)   
      { ee++;   
        ee%=9901;   
        if(!ee){sol=0;return;}   
        sol*=ee;   
        sol%=9901;   
      }   
    }   
    printf("%lld",sol);   
}