Cod sursa(job #2757828)

Utilizator matei.balaur2009Matei Balaur12 matei.balaur2009 Data 6 iunie 2021 18:12:24
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>

#define MOD 9901
using namespace std;
ifstream cin("sumdiv.in");
ofstream cout("sumdiv.out");
int lgput( int a, int b ) {
  int put = 1;
  while ( b > 0 ) {
      if ( b % 2 == 1 )
          put = 1LL*put * a % MOD;
      a = 1LL*a * a % MOD;
      b /= 2;
  }
  return put;
}

int main() {
  int a, n, e, d, var, imp, rez;
  cin>>a>>n;
  d = 2;
  rez = 1;
  while (d * d <= a) {
    e = 0;
    while(a % d == 0) {
      e++;
      a /= d;
    }
    if( e ) {
      if (d%MOD==1) {
        rez = ( 1LL*rez * ( e * n + 1 ) ) % MOD;
      } else {
      e*=n;
      e++;
      var = lgput( d, e );
      if( var % MOD == 0 )
        var = MOD - 1;
      else
        var--;
      imp = lgput( d - 1, MOD - 2 );
      rez = 1LL*rez * var * imp % MOD;
      }
    }
    d++;
  }
  if( a > 1 ) {
    if (a%MOD==1) {
      rez=(1LL*rez*(n+1))%MOD;
    } else{
      e=1;
      e*=n;
      e++;
      var=lgput(a,e);
      if( var % MOD == 0 )
        var=MOD-1;
      else
        var--;
      imp = lgput(a-1,MOD-2);
      rez=1LL*rez*var*imp%MOD;
    }
  }
  cout<<rez;
  return 0;
}