Cod sursa(job #1736408)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 1 august 2016 17:53:21
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<cstdio>
#define MOD 9901
using namespace std;
int RaiseToPower(int base,int power){
    int answer=1;
    while(power>0){
        if(power%2==1)
            answer=(answer*base)%MOD;
        base=(base*base)%MOD;
        power/=2;
    }
    return answer;
}
int main(){
    freopen("sumdiv.in","r",stdin);
    freopen("sumdiv.out","w",stdout);
    int a,b,i,power,answer=1;
    scanf("%d%d",&a,&b);
    for(i=2;i*i<=a;i++)
        if(a%i==0){
            power=0;
            while(a%i==0){
                a/=i;
                power++;
            }
            answer=(answer*(RaiseToPower(i,b*power+1)-1))%MOD;
            answer=(answer*RaiseToPower(i-1,MOD-2))%MOD;
        }
    if(a!=1)
        if(a%MOD==1)
            answer=(answer*(b+1))%MOD;
        else{
            answer=(answer*(RaiseToPower(a,b+1)-1))%MOD;
            answer=(answer*RaiseToPower(a-1,MOD-2))%MOD;
        }
    printf("%d",answer);
    return 0;
}