Cod sursa(job #3164705)

Utilizator vladimir.gavris.1Gavris Mihai Vladimir vladimir.gavris.1 Data 4 noiembrie 2023 09:46:52
Problema Suma divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>

#define MOD 9901

int exponentiere( int a, int b )
{
    int p = 1;
    a = a % MOD;
    while( b > 0 )
    {
        if( b % 2 == 1 )
        {
            p = p * a % MOD;
        }
        a = a * a % MOD;
        b /= 2;
    }

    return p;
}

int invers_modular( int a )
{
    return exponentiere( a, MOD - 2 );
}

int sumdiv( int a, int b )
{
    int copie = a;
    a = a % MOD;
    if( a == 0 )
    {
        return 1;
    }
    if( a == 1 )
    {
        return ( b + 1 ) % MOD;
    }
    return ( exponentiere( copie, b + 1 ) + MOD - 1 ) % MOD * invers_modular( copie - 1 ) % MOD;
}

int main()
{
    FILE *fin, *fout;
    int a, b, s, div, prod = 1, exp;

    fin = fopen( "sumdiv.in", "r" );
    fscanf( fin, "%d%d", &a, &b );
    fclose( fin );

    for( div = 2; div * div <= a; div++ )
    {
        exp = 0;
        if( a % div == 0 )
        {
            while( a % div == 0 )
            {
                a /= div;
                exp++;
            }
            prod = ( prod * sumdiv( div, exp * b ) ) % MOD;
        }
    }

    if( a > 1 )
    {
        prod = ( prod * sumdiv( a, b ) ) % MOD;
    }

    fout = fopen( "sumdiv.out", "w" );
    fprintf( fout, "%d", prod );
    fclose( fout );
    return 0;
}