Cod sursa(job #2471247)

Utilizator DragosSDragos Sarbu DragosS Data 10 octombrie 2019 17:33:11
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<bits/stdc++.h>
#define MOD 9901

using namespace std;

int lgput(int a,int n)
{
    int p=1;
    while(n)
    {
        if(n%2==1)
            p= p*a % MOD;
        a=a*a % MOD;
        n/=2;
    }
    return p;
}



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

    int a,b;
    long long s=1;

    f>>a>>b;

    for(int d=2;d<=a/d;d++)
    {
         if (a%d == 0)
        {
            int exponent = 0;
            while (a%d == 0)
            {
                a /= d;
                exponent++;
            }
            s *= 1LL*(lgput(d, exponent*b+1)-1); s %= MOD;
            s *= 1LL*lgput(d-1, MOD-2); s %= MOD;
        }
    }
    if (a != 1)
    {
        if ((a-1)%MOD == 0)
        {
            s *= (1LL*(b+1)%MOD);
            s %= MOD;
        }
        else
        {
            a %= MOD;
            s *= 1LL*(lgput(a, b+1)-1); s %= MOD;
            s *= 1LL*lgput(a-1, MOD-2); s %= MOD;
        }
    }
    while (s < 0)
        s += MOD;

    g<<s;

    f.close();
    g.close();
}