Cod sursa(job #2632050)

Utilizator un_fes_galbendaniel guba un_fes_galben Data 2 iulie 2020 08:07:29
Problema Suma divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>

using namespace std;
long long  fact[20];
long long put[20];
inline long long  Putere(long long  A , long long  n)
{
    long long rez=1;
    for(int j=n;j!=0;j>>=1)
    {
        if(j&1)
        {
            rez*=A;
            rez%=9901;
        }
        A=1LL*A*A;
        A%=9901;
    }
    if(rez==0)
    {
        rez=9900;
    }
    else
    {
        rez--;
    }
    return rez;
}
int main()
{
    ifstream cin("sumdiv.in");
    ofstream cout("sumdiv.out");
    int a,b,poz=0;
    cin>>a>>b;
    int d=2,cnt=0;
    while(a>1&&d*d<=a)
    {
        cnt=0;
        while(a%d==0)
        {
            a/=d;
            cnt++;
        }
        if(cnt!=0)
        {
            fact[poz]=d;
            put[poz]=cnt*b+1;
            poz++;
        }
        d++;
    }
    if(a>1)
    {
       fact[poz]=a;
            put[poz]=b+1;
            poz++;
    }
    long long sum=1;
    for(int i=0;i<poz;i++)
    {
        long long x=Putere(fact[i],put[i]);
        x/=(fact[i]-1);
        sum*=x;
        sum%=9901;
    }
    cout<<sum<<'\n';
    return 0;
}