Cod sursa(job #2662787)

Utilizator Asgari_ArminArmin Asgari Asgari_Armin Data 24 octombrie 2020 14:45:52
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.05 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;
  if( n == 0 )
    sol = 0;
  while( d * d <= n ){
    e = 0;
    while( !(n % d) ){
      ++e;
      n /= d;
    }
    if( e > 0 ){
      if( d % MOD == 1 )
        sol = (1LL * sol * (e * k + 1)) % MOD;
      else{
        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 ){
    if( n % MOD == 1 )
      sol = (1LL * sol * (k + 1)) % MOD;
    else{
      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;
}