Cod sursa(job #2374647)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 7 martie 2019 19:48:02
Problema Suma divizorilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<bits/stdc++.h>
#define mod 9901
using namespace std;

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

int a,b,sol;

int put(int ce, int la)
{
    int sol=1;
    while(la)
    {
        if(la&1)
        {
            sol=(sol*ce)%mod;
        }
        ce=(ce*ce)%mod;
        la>>=1;
    }
    return sol;
}
int inv(int x)
{
    return put(x,mod-2);
}

int main()
{
    f>>a>>b;
    int d=2;
    if(b==0 || a==1)
    {
        g<<1;
        return 0;
    }
    if(a==0)
    {
        g<<0;
        return 0;
    }
    while(a!=1)
    {
        if(a%d==0)
        {
            int e=0;
            while(a%d==0)
            {
                e++;
                a/=d;
            }
            if(e)
            {
                sol*=(1LL*(put(d,e*b+1)-1)*inv(d-1))%mod;
            }
        }

        if(d==2)
            d++;
        else
            d+=2;
        if(d*d>a)
            d=a;
    }
    g<<sol;
}