Cod sursa(job #1414937)

Utilizator demetriad-dagpagDavid Demetriad demetriad-dagpag Data 3 aprilie 2015 12:46:57
Problema Suma divizorilor Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <stdlib.h>
#define MODULO 9901
int lgput(int n,int p)
{
    if(p==0) return 1;
    if(p==1) return n%MODULO;
    if(p%2==0) return(lgput(n*n%MODULO,p/2))%MODULO;
    if(p%2==1) return(n*lgput(n*n%MODULO,p/2))%MODULO;
}
int main()
{
    int a,b,x,div,exp,sum,y;
    freopen("sumdiv.in","r",stdin);
    freopen("sumdiv.out","w",stdout);
    scanf("%d%d",&a,&b);
    x=lgput(a,b);
    x%=MODULO;
    div=2;
    sum=1;
    while(div*div<=x)
    {
        exp=0;
        while(x%div==0)
            x/=div,exp++;
        if(exp>0){
            y=lgput(div,exp+1);
            sum*=((y-1)/(div-1))%MODULO;
        }
        div++;
    }
    if(x>1)
    {
        y=lgput(x,2);
        sum*=((y-1)/(x-1))%MODULO;
    }
    printf("%d\n",sum%MODULO);

    return 0;
}