Cod sursa(job #1547769)

Utilizator tudormaximTudor Maxim tudormaxim Data 9 decembrie 2015 20:56:44
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
const int mod=9901;

int log_pow(int n, int p)
{
    int s=1;
    while(p)
    {
        if(p&1) s=(1LL*s*n)%mod;
        n=(1LL*n*n)%mod;
        p=p>>1;
    }
    return s;
}

int main()
{
    ifstream fin ("sumdiv.in");
    ofstream fout ("sumdiv.out");
    ios_base::sync_with_stdio(false);
    int a, b, sol, s, i, nr;
    fin >> a >> b;
    sol=1;
    for(i=2; i<=sqrt(a); i++)
        if(a%i==0)
        {
            for(nr=0; a%i==0; a=a/i) nr++;
            s=(log_pow(i, nr*b+1)-1+mod)%mod;
            sol=(1LL*sol*s*log_pow(i-1,mod-2))%mod;
        }
    if(a>1)
    {
        if(a%mod==1) sol=(1LL*sol*(b+1))%mod;
        else
        {
            s=(log_pow(a,b+1)-1+mod)%mod;
            sol=(1LL*sol*s*log_pow(a-1,mod-2))%mod;
        }
    }
    fout << sol;
    fin.close();
    fout.close();
    return 0;
}