Cod sursa(job #2633025)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 6 iulie 2020 12:17:43
Problema Suma divizorilor Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>
#define MOD 9901

using namespace std;

ifstream fin  ("sumdiv.in");
ofstream fout ("sumdiv.out");

unsigned long long a, b, exp, sol=1;

int powlog(int x, int y){
    long long sol=1;

    while(y != 0){

        if(y%2 == 1)
            sol*=x;

          x*=x;
          y/=2;
          x%=MOD;
          sol%=MOD;
    }

    sol%=MOD;
    return sol;
}

void solve(int d){
    if(a%d != 0)
        return;

    exp=0;
    while(a%d == 0){
        exp++;
        a/=d;
    }

    sol = sol * (MOD + powlog(d, exp*b+1) - 1) % MOD;
}

int main (){
    fin>>a>>b;
    if(a == 0){
        fout<<0;
        return 0;
    }

    solve(2);
    solve(3);

    for(int i=5; 1LL*i*i<=a; i+=6){
        solve(i);
        solve(i+2);
    }
    if(a > 1)
        solve(a);

    fout<<sol;
    return 0;
}