Cod sursa(job #3322977)

Utilizator calinulCalin Cernat calinul Data 16 noiembrie 2025 13:46:45
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.99 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 main() {
  FILE *fin, *fout;
  int a, b, numarator, numitor, i, e;

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

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

  fout = fopen( "sumdiv.out", "w" );
  fprintf( fout, "%d\n", (numarator * pow_mod( numitor % MOD, MOD - 2 )) % MOD );
  fclose( fout );

  return 0;
}