Cod sursa(job #3206154)

Utilizator eugenioMarinescu Eugenio eugenio Data 21 februarie 2024 19:06:22
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <fstream>
#define mod 9901
using namespace std;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");

int a, b, c, ok, p;
long long sol=1;

int expr(int x, int y)
{
    if(y==0)
        return 1;
    long long ans=expr(x,y/2)%mod;
    if(y%2==0)
        return (ans*ans)%mod;
    else
        return (x*ans*ans)%mod;
}


int main()
{
    cin>>a>>b;
    for(int d=2; d*d<=a; d++)
    {
        ok=0;
        p=0;
        while(a%d==0)
        {
            p++;
            a/=d;
            ok=1;
        }
        sol*=(expr(d,p*b+1)%mod-1)/(d-1)%mod;
    }
    if(a>1)
        sol*=(expr(a,b+1)%mod-1)/(a-1)%mod;
    cout<<sol%mod;
}

/*
formula sumei divizorilor unui numar natural

S(n)=(p1^(e1+1)-1)/(p1-1)+(p2^(e2+1)-1)/(p2-1)+...+(pn^(en+1)-1)/(pn-1)

unde p1,p2,..,pn sunt factorii primi din descompunere
     e1,e2,..,en sunt exponentii factorilor
*/