Cod sursa(job #2514411)

Utilizator BAlexandruBorgovan Alexandru BAlexandru Data 25 decembrie 2019 18:32:05
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
#define mod 9901

using namespace std;

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

int a,b;
int i,k;
int sus, jos;
int rez=1;

int ridicare(int n, int p)
{
    int rez=1;
    while (p)
    {
        if (p%2)
            rez = (1LL * rez * n) % mod;
        n = (1LL * n * n) % mod;
        p = p / 2;
    }
    return rez;
}

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

    for (i=2; i*i<=a; i++)
    {
        k=0;
        while (a%i==0)
        {
            a = a / i;
            k++;
        }

        if (k)
        {
            k *= b;
            sus = ridicare(i, k+1) - 1;
            if (sus < 0)
                sus += mod;
            jos = ridicare(i-1, mod-2);
            rez = (1LL * rez * sus * jos) % mod;
        }
    }

    if (a>1)
    {
        k=b;
        sus = ridicare(a, k+1) - 1;
        if (sus < 0)
            sus += mod;
        jos = ridicare(a-1, mod-2);
        rez = (1LL * rez * sus * jos) % mod;
    }

    g<<rez;

    return 0;
}