Cod sursa(job #2451391)

Utilizator AnduebossAlexandru Ariton Andueboss Data 26 august 2019 16:22:07
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
//
//  main.cpp
//  pairs
//
//  Created by Andu Andu on 26/08/2019.
//  Copyright © 2019 Andu Andu. All rights reserved.
//

#include <iostream>
#include <fstream>
#define MOD 9901
#define ll long long
using namespace std;

ifstream f ("sumdiv.in");
ofstream g ("sumdiv.out");

long long n;
long long i, j, k, x, d;
long long SOL = 1, ciur[1000001], s, e, aux, r=1;
bool isOK[1000001], epp[1000001];
long long maxx = 0;



long long  lgput(long long  baza,long long  exp)
{
    baza%=MOD;
    long long rez=1;
    while(exp)
    {
        if(exp&1)rez*=baza;
        baza*=baza;
        baza%=MOD;
        rez%=MOD;
        exp>>=1;
    }
    return rez;
}

int a,b;

int main() {
    f>>a>>b;
    for(d=2;d*d<=a && a>1;++d) {
        e=0;
        while(a%d==0)
        {
            a/=d;
            ++e;
        }
        if(e!=0 && d%MOD!=0)
        {
            if(d%MOD==1)r=r*(e*b+1);
            else
            {
                aux=(lgput(d,e*b+1)-1)%MOD;
                if(aux<0)aux+=MOD;
                r=r*aux;
                r%=MOD;
                r=r*lgput(d-1,MOD-2);
                r%=MOD;
            }
        }
    }
    if(a>1 and a%MOD!=0) {
        if(a%MOD==1)
            r=(r*(b+1))%MOD;
        else
        {
            aux=(lgput(a,b+1)-1);
            if(aux<0)aux+=MOD;
            r=r*aux;
            r%=MOD;
            r=r*lgput(a-1,MOD-2);
            r%=MOD;
        }
    }
    
    g<<r;
    return 0;
}