Cod sursa(job #1955397)

Utilizator vlasiuflaviusVlasiu Flavius vlasiuflavius Data 5 aprilie 2017 22:34:27
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <fstream>
#define mod 9901
using namespace std;
ofstream fout ("sumdiv.out");
ifstream fin ("sumdiv.in");
int put( long long a , long long b )
{
    int rsp = 1;
    for( int i = 0 ; ( 1LL << i ) <= b ; i++ )
    {
        if( ( 1LL << i ) & b )
            rsp = ( rsp * a ) % mod;
        a = ( a * a ) % mod;
    }
    return rsp;
}
long long a,b,i,rsp;
long long cnt;
int main()
{
    fin>>a>>b;
    rsp = 1;
    for( i = 2 ; i * i <= a ; i++ )
    {
        if( a % i == 0 )
        {
            cnt = 0;
            while( a % i == 0 )
            {
                a /= i;
                cnt++;
            }
            cnt *= b;
            rsp = ( ( ( rsp * ( put( i , cnt + 1 ) - 1  ) ) % mod ) * put( i - 1 , mod - 2 ) ) % mod;
        }
    }
    if( a > 1 )
    {
        rsp = ( ( ( rsp * ( put( a , b + 1 ) - 1  ) ) % mod ) * put( a - 1 , mod - 2 ) ) % mod;
    }
    fout<<( rsp + mod ) % mod;
}