Cod sursa(job #3287509)

Utilizator Darius1414Dobre Darius Adrian Darius1414 Data 18 martie 2025 14:26:59
Problema Suma divizorilor Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <bits/stdc++.h>
#define mod 9901
using namespace std;
unsigned long long a,b,pu[20],pu2[20],di[20],ct;
unsigned long long expo(unsigned long long x,unsigned long long exp)
{
    if (exp==0)
        return 1;
    if (exp%2==1)
        return x%mod*expo(x,exp-1)%mod;
    long long y=expo(x,exp/2);
    return y*y%mod;
}
int main()
{
    ifstream f ("sumdiv.in");
    ofstream g ("sumdiv.out");
    f>>a>>b;
    for (unsigned long long i=2; i*i<=a && a!=1; i++)
    {
        if (a%i==0)
        {
            unsigned long long d=i,p=0;
            while (a%d==0)
            {
                a/=d;
                p++;
            }
            di[++ct]=d%mod;
            pu[ct]=b;
            pu2[ct]=p;
        }
    }
    unsigned long long rsp=1;
    if (a>1 && (a-1)%mod)
        di[++ct]=a%mod,pu[ct]=b,pu2[ct]=1;
        else if (a>1)
            rsp=rsp*(b+1)%mod;
    for (int i=1; i<=ct; i++)
    {
        unsigned long long r=1,pp=expo(di[i],pu[i]);
        for (int j=1;j<=pu2[i];j++)
            r=r*pp%mod;
        r=r*di[i]%mod;
        rsp=rsp*(r+mod-1)%mod*expo(di[i]-1,mod-2)%mod;
    }
    g<<rsp;
}