Cod sursa(job #2984628)

Utilizator AffectiveSmile2Mihnea Matea AffectiveSmile2 Data 24 februarie 2023 16:19:48
Problema Suma divizorilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
const int MOD=9901;
bool ciur[5000001];
long long int prime[1000001],nrPrime=0;
long long lgPow(long long int x, long long int n)
{
    long long val=1,a=x;
    while(n>0)
        if(n%2==0)
        {
            a=(a*a)%MOD;
            n/=2;
        }
        else
        {
            val=(val*a)%MOD;
            n--;
        }
    return val;
}
int main()
{
    long long int i,j,nrTeste,a,b,nrDiv,sDiv;
    ciur[1]=1;
    for(i=2; i<=5000; i++)
        if(ciur[i]==0)
        {
            nrPrime++;
            prime[nrPrime]=i;
            for(j=i*2; j<=2500000; j+=i)
                ciur[j]=1;
        }
    for(i=5001; i<=2500000; i++)
        if(ciur[i]==0)
        {
            nrPrime++;
            prime[nrPrime]=i;
        }
    f>>a>>b;
    nrDiv=1;
    sDiv=1;
    for(j=1; j<=nrPrime&&1LL*prime[j]*prime[j]<=a; j++)
        if(a%prime[j]==0)
        {
            ///if(i==6)
            /// cout<<prime[j]<<' '<<n<<'\n';
            long long int exponent=0;
            while(a%prime[j]==0)
            {
                exponent++;
                a/=prime[j];
            }
            exponent*=b;
            sDiv=(sDiv*((lgPow(prime[j],exponent+1)%MOD-1)%MOD))%MOD;
            sDiv=(sDiv*((lgPow(prime[j]-1,MOD-2))%MOD))%MOD;
        }
    if(a>1)
    {
        sDiv=(sDiv*((lgPow(a,b+1)%MOD-1)%MOD))%MOD;
    }
    g<<sDiv<<'\n';


}