Cod sursa(job #2696819)

Utilizator rareshinnhoMiroiu Rares rareshinnho Data 16 ianuarie 2021 21:40:00
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("sumdiv.in");
ofstream g("sumdiv.out");

const int mod=9901;
int a,b,ans;

int logpow (int x, int n)
{
    if(n==0)return 1;
    if(n==1)return x;
    unsigned long long y;
    y=logpow(x,n/2);
    y=(y*y)%mod;
    if(n%2==1)y=(y*x)%mod;
    return y;
}

int main ()
{
    int ans = 1;
    f>>a>>b;
    if (a==0&&b==0)
    {
        g<<1;
        return 0;
    }
    if(a==0)
    {
        g<<0;
        return 0;
    }
    if(b==0)
    {
        g<<1;
        return 0;
    }
    for (int i=2;i*i<=a;i++)
    {
        if (a%i==0)
        {
            int e=0;
            while(a%i==0)
            {
                e++;
                a/=i;
            }
            e*=b;
            if (i%mod==1)
            {
                ans*=(e + 1);
                ans%=mod;
            }
            else
                ans =1ll*ans*(logpow(i%mod, e+1)-1+mod)*logpow((i - 1)% mod, mod-2)%mod;
        }
    }
    if (a>1)
    {
        if (a%mod==1)
        {
            ans*=(b+1);
            ans%=mod;
        }
        else
            ans = 1ll * ans * (logpow(a % mod, b + 1) - 1 + mod) * logpow((a - 1) % mod, mod - 2) % mod;
    }
    g<<ans;
    return 0;
}