Cod sursa(job #2285458)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 18 noiembrie 2018 16:49:33
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int MOD = 9901;
long long S = 1;
int pow(long long a, int p)
{
    long long x = 1;
    while(p > 0)
    {
        if(p % 2 == 0)
        {
            p /= 2;
            a = a * a % MOD;
        }
        else
        {
            p--;
            x = x * a % MOD;
        }
    }
    return x;
}
void add(int x,int n)
{
    if(x==0)return;
    if(x==1)
        S=S*(n+1)%MOD;
    else
    {
        S=S*(pow(x,n+1)-1)%MOD*pow(x-1,MOD-2)%MOD;
        if(S<0)S+=MOD;
    }
}
int main()
{
    int A, B, p;
    f >> A >> B;
    for(int d = 2; d * d <= A; d++)
        if(A % d == 0)
        {
            for(p = 0; A % d == 0; p++, A /= d);
            add(d % MOD, B * p);
        }
    if(A > 1)
        add(A % MOD, B);
    g << S;
    return 0;
}