Cod sursa(job #2662774)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 24 octombrie 2020 14:21:27
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>

using namespace std;

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

const int MOD = 9901;

int lgput( int x, int y ){
  int p = 1;
  while( y ){
    if( y & 1 )
      p = (1LL * p * x) % MOD;
    x = (1LL * x * x) % MOD;
    y >>= 1;
  }
  return p;
}
int main() {
  int n, k, d, e, sol;
  fin >> n >> k;
  d = 2;
  sol = 1;
  while( d * d <= n ){
    e = 0;
    while( !(n % d) ){
      ++e;
      n /= d;
    }
    if( e > 0 ){
      sol = (1LL * sol * ((lgput((d % MOD), (e * k) + 1) - 1 + MOD) % MOD)) % MOD;
      sol = (1LL * sol * lgput((d - 1) % MOD, MOD - 2)) % MOD;
    }
    ++d;
  }
  if( n > 1 ){
    sol = (1LL * sol * ((lgput((n % MOD), k + 1) - 1 + MOD) % MOD)) % MOD;
    sol = (1LL * sol * lgput((n - 1) % MOD, MOD - 2)) % MOD;
  }
  fout << sol;
  return 0;
}