Cod sursa(job #949124)

Utilizator matei_cChristescu Matei matei_c Data 12 mai 2013 16:34:35
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<fstream>
#include<algorithm>
using namespace std ;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");

#define mod 9901

int A, B ;

int sol = 1 ;

int putere(int N, int P)
{
    int rez = 1 ;

    N %= mod ;

    while( P )
    {
        if( P % 2 )
            rez = ( rez * N ) % mod ;
        N = ( N * N ) % mod ;
        P >>= 1 ;
    }

    return rez ;
}

int main()
{
    fin >> A >> B ;

    for(int i = 2; i * i <= A; ++i )
    {
        int exp = 0 ;

        while( A % i == 0 )
        {
            ++exp ;
            A /= i ;
        }
        exp *= B ;

        if( exp )
        {
            if( i % mod == 1 )
                sol = ( sol * ( exp + 1 ) ) % mod ;
            else
                sol = ( sol * ( putere( i, exp + 1 ) - 1 + mod ) % mod * putere( i - 1, mod - 2 ) ) % mod ;
        }
    }

    if( A > 1 )
    {
        if( A % mod == 1 )
            sol = ( sol * ( B + 1 ) ) % mod ;
        else
            sol = ( sol * ( putere( A, B + 1 ) - 1 + mod ) % mod * putere( A - 1, mod - 2 ) ) % mod ;
    }

    fout << sol ;

    return 0 ;
}