Cod sursa(job #1547758)

Utilizator tudormaximTudor Maxim tudormaxim Data 9 decembrie 2015 20:39:25
Problema Suma divizorilor Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <iostream>
#include <fstream>
using namespace std;
const long long mod = 9901;

long long log_pow(long long x, long long p)
{
    x=x%mod;
    int sol=1;
    while(p)
    {
        if(p&1) sol=(sol*x)%mod;
        p=p>>1;
        x=(x*x)%mod;
    }
    return sol;
}

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