Cod sursa(job #3164570)

Utilizator ArklahhisCraciun Mihai Arklahhis Data 3 noiembrie 2023 18:24:24
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
#define MOD 9901
long long a,b;
long long put(long long a, long long n)
{
    long long p=1;
    while (n>0)
    {
        if (n%2==1)
            p=((p%MOD)*(a%MOD))%MOD;
        a=(a%MOD)*(a%MOD);
        n/=2;
    }
    return p;
}
long long sumdiv(int x, int y)
{
    long long d=2;
    long long exp=0;
    long long s=1;
    while (x%2==0)
    {
        exp++;
        x/=2;
    }
    exp*=y;
    s=((s%MOD)*((put(2,exp+1)-1)%MOD))%MOD;
    d=3;
    while (x>1)
    {
        exp=0;
        while (x%d==0)
        {
            exp++;
            x/=d;
        }
        exp*=y;
        s=((s%MOD)*(((put(d,exp+1)-1)/(d-1))%MOD))%MOD;
        if (d*d<=x)
            d+=2;
        else
            d=x;
    }
    return s;
}
int main()
{
    fin >> a >> b;
    fout << sumdiv(a,b);
    return 0;
}