Cod sursa(job #3039204)

Utilizator unomMirel Costel unom Data 28 martie 2023 12:00:59
Problema Suma divizorilor Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <fstream>

using namespace std;

ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
int MOD = 9901;

int pow(int x, int y)
{
    x = x % MOD;
    int rez = 1;
    int r;

    while(y != 0)
    {
        r = y % 2;
        if(r == 1)
        {
            rez = (rez * x) % MOD;
        }
        x = (x * x) % MOD;
        y = y / 2;
    }

    return rez % MOD;
}

void gcd(int a, int b, long long *x, long long *y)
{
    if(b == 0)
    {
        *x = 1;
        *y = 0;
    }
    else
    {
        long long x0, y0;
        gcd(b, a%b, &x0, &y0);
        *x = y0;
        *y = x0 - (a/b) * y0;
    }
}

int main()
{
    int a, b;
    f>>a>>b;

    int p1 = (pow(a, b+1) % MOD -1) % MOD;
    int p2 = (a-1)%MOD;
    while(p2 < 0)
    {
        p2 += MOD;
    }
    long long inv, y;
    gcd(p2, MOD, &inv, &y);

    while(inv < 0)
    {
        inv += MOD;
    }

    int ans = (1LL*p1*inv) % MOD;

    g<<ans;

    return 0;
}