Cod sursa(job #2338105)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 7 februarie 2019 00:32:11
Problema Suma divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std ;
ifstream in ("sumdiv.in") ;
ofstream out ("sumdiv.out") ;
int64_t s = 1 , p = 1 , a , b ;
const int MOD = 9901 ;
int64_t lgpow ( int64_t x , int64_t y )
{
    if ( y == 1 )   return x ;
    if ( y % 2 )    return ( x * lgpow ( ( x * x ) % MOD , y >> 1 ) ) % MOD ;
    else            return lgpow ( ( x * x ) % MOD , y >> 1 ) ;
}
int zoli ( )
{
    for ( int i = 2 ; a != 1 ; i ++ )
    {
        if ( !( a % i ) )
        {
            int prod = lgpow( i , b ) % MOD ;
            while ( !( a % i ) )
            {
                a /= i ;
                s = s * prod % MOD ;
            }
            s = ( s * i - 1 ) % MOD ;
            p *= i - 1 ;
            p %= MOD ;
        }
    }
    return s * lgpow( p , MOD - 2 ) % MOD ;
}

int main ()
{
    cin >> a >> b ;
    if ( !a )   return cout << 0 , 0 ;
    if ( !b )   return cout << 1 , 0 ;
    return cout << zoli( ) , 0 ;
}