Cod sursa(job #3323028)

Utilizator calinulCalin Cernat calinul Data 16 noiembrie 2025 16:58:05
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

const int MOD = 9901;

int pow_mod( int p, int e ) {
  int rez = 1;
  while ( e > 0 ) {
    if ( e % 2 == 1 )
      rez = ((long long)rez * p) % MOD;
    p = ((long long)p * p) % MOD;
    e /= 2;
  }
  return rez;
}

int fact( int p, int e ) {
  if ( p % MOD == 0 )
    return 1;
  if ( p % MOD == 1 )
    return (e + 1) % MOD;
  return (pow_mod( p, e + 1 ) + MOD - 1) * pow_mod( p - 1, MOD - 2 ) % MOD;
}

int main() {
  FILE *fin, *fout;
  int a, b, ans, i, e;

  fin = fopen( "sumdiv.in", "r" );
  fscanf( fin, "%d%d", &a, &b );
  fclose( fin );

  ans = 1;
  for ( i = 2; i * i <= a; i++ ) {
    if ( a % i == 0 ) {
      e = 0;
      while ( a % i == 0 ) {
        e++;
        a /= i;
      }
      ans = ans * fact( i, e * b ) % MOD;
    }
  }
  if ( a > 1 )
    ans = ans * fact( a, b ) % MOD;

  fout = fopen( "sumdiv.out", "w" );
  fprintf( fout, "%d\n", ans );
  fclose( fout );

  return 0;
}