Cod sursa(job #2338100)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 7 februarie 2019 00:17:45
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 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 = 9973 ;
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 cnt = 0 ;
            while ( !( a % i ) )
            {
                cnt ++ ;
                a /= i ;
            }
            s = s * ( lgpow( i , 1LL * ( b * cnt + 1 ) ) - 1 + MOD ) % MOD ;
            p *= i - 1 ;
            p %= MOD ;
        }
    }
    return s * lgpow( p , MOD - 2 ) % MOD ;
}

int main ()
{
    in >> a >> b ;
    out << zoli( ) ;
    return 0 ;
}