Cod sursa(job #1913956)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 8 martie 2017 14:51:31
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <fstream>
using namespace std;
const long long MOD = 9901;
ifstream f ("sumdiv.in");
ofstream g ("sumdiv.out");
long long S = 1, n, b;
long long pow (long long a, long long p)
{
    long long x = 1;
    while (p > 0)
        if (p % 2 == 0)
        {
            a = (a * a) % MOD;
            p /= 2;
        }
        else
        {
            x = (x * a) % MOD;
            p--;
        }
    return x;
}
void add (long long x, long long n)
{
    if (x == 0)
        S = S * pow (MOD - 1, MOD - 1) % MOD;
    else if (x == 1)
        S = S * (n + 1) % MOD;
    else S = S * (pow (x, n + 1) + MOD - 1) % MOD * pow ( (x + MOD - 1) % MOD, MOD - 2) % MOD;
}
int main()
{
    long long i, p;
    f >> n >> b;
    for (i = 2; i * i <= n; i++)
        if (n % i == 0)
        {
            for (p = 0; n % i == 0; p++, n /= i);
            add (i % MOD, b * p);
        }
    if (n != 1) add (n % MOD, b);
    g << S;

}