Cod sursa(job #2271891)

Utilizator cicero23catalin viorel cicero23 Data 29 octombrie 2018 13:45:29
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define ll long long
#define M 9901

using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
ll putere(ll x,ll n)
{
    ll a;
    if(n==0) return 1;
    else if(n==1) return x;
    a=putere(x,n/2);
    if(n%2==0) return (a*a)%M;
    else return ((x*a)%M*a)%M;
}
int main()
{
    ll a,n,k;
    f>>a>>n;
    ll s1=1,s2=1;
    for(ll i=2;i<=sqrt(a);i++)
    {
        ll put=0;
        while(a%i==0){put++,a/=i;}


        if(put!=0)
        {
            if (i == M)
         continue;

        if (i % M == 1)
        s1 = (s1 * (n*put + 1)) % M;
        else{
            if(i>M)i=i%M;
            k=putere(i,n*put+1);
            if(k<=1) k+=M;
            s1=(s1*(k-1))%M;

            s2=(s2*(putere(i-1,M-2)))%M;}

        }
    }
    if(a>1&&a!=M)
    {


        if (a % M == 1)
        s1 = (s1 * (n+ 1)) % M;
        else{
    s1=(s1*(putere(a,n+1)-1))%M;
    s2=(s2*(putere(a-1,M-2)))%M;}}
    g<<(s1*s2)%M;
    return 0;
}