Cod sursa(job #2633020)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 6 iulie 2020 12:06:56
Problema Suma divizorilor Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 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, d, 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;
    }

    return sol%MOD;
}

int main (){
    fin>>a>>b;

    exp=0;
    while(a%2 == 0){
        exp++;
        a/=2;
    }
    if(exp > 0){
        exp *= b;
        sol *= ( powlog(2, exp+1) - 1 )%MOD;
        sol %= MOD;
    }


    for(int i=3; i*i<=a; i+=2){
        d=i;
        exp=0;
        while(a%d == 0){
            exp++;
            a/=d;
        }
        if(exp > 0){
            exp*=b;
            sol *= (  (powlog(d, exp+1) - 1) / (d - 1)  )%MOD;
            sol %= MOD;
        }
    }

    fout<<sol;
    return 0;
}