Cod sursa(job #2663827)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 27 octombrie 2020 13:38:12
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <fstream>
#include <cstdio>

using namespace std;
ifstream cin ( "sumdiv.in" );
ofstream cout ( "sumdiv.out" );
#define MOD 9901
int main()
{
    unsigned long long a, b, d, ans, p, n, ans1, ca;
    cin >> a >> b;
    d = 2;
    ans = 1;
    ca = a;
    while ( d * d <= a ) {
       p = 0;
       while ( a % d == 0 ) {
          p++;
          a /= d;
       }
       if ( p > 0 ) {
         if( d % MOD == 1 )
          ans = ans * (p * b + 1) % MOD;
         else {
           n = p * b + 1;
           p = d;
           ans1 = 1;
           while ( n > 0 ) {
             if ( n % 2 == 1 )
              ans1 = ans1 * ( p % MOD ) % MOD;
             p =  ( p % MOD ) * ( p % MOD ) % MOD;
             n /= 2;
           }
           if ( ans1 > 1 )
            ans = ans * ( ans1 - 1 ) % MOD;
           else
            ans = ans * 9900 % MOD;
           n = MOD - 2;
           p = d - 1;
           while ( n > 0 ) {
             if ( n % 2 == 1 )
              ans = ans * ( p % MOD ) % MOD;
             p =  ( p % MOD ) * ( p % MOD ) % MOD;
             n /= 2;
            }
         }
       }
       d++;
    }
    if ( a > 1 ) {
      if( a % MOD == 1 )
        ans = ans * (b + 1) % MOD;
      else {
         n = b + 1;
         p = a;
         ans1 = 1;
         while ( n > 0 ) {
           if ( n % 2 == 1 )
            ans1 = ans1 * ( p % MOD ) % MOD;
           p = ( p % MOD ) * ( p % MOD ) % MOD;
           n /= 2;
         }
         if ( ans1 > 1 )
          ans = ans * ( ans1 - 1 ) % MOD;
         else
          ans = ans * 9900 % MOD;
         n = MOD - 2;
         p = a - 1;
         while ( n > 0 ) {
           if ( n % 2 == 1 )
            ans = ans * ( p % MOD ) % MOD;
           p =  ( p % MOD ) * ( p % MOD ) % MOD;
           n /= 2;
         }
       }
    }
    if ( ca > 0 )
      cout << ans;
    else
      cout << "0";
    return 0;
}