Cod sursa(job #3323394)

Utilizator Coman_DianaComan Diana Coman_Diana Data 18 noiembrie 2025 11:44:55
Problema Suma divizorilor Scor 10
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
#include <stdlib.h>

#define MOD 9901

int exp_rap( int a, int n ) {

  int p = 1;

  while ( n > 0 ) {
    if ( n % 2 == 1 )
      p = p * a % MOD;
    a = a * a % MOD;
    n = n / 2;
  }
  return p;

}

int main()
{
    FILE *fin, *fout;
    int num_a, num_b, p, e, sumi, divi, put, num;

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

    sumi = 1;
    divi = 2;
    while ( divi * divi <= num_a ) {
      put = 0;
      while ( num_a % divi == 0 ) {
        put++;
        num_a = num_a / divi;
      }
      if ( put > 0 ) {
        p = divi;
        e = put + 1;
        num = exp_rap( p, e );
        sumi = sumi * (( num - 1 ) / ( p - 1 )) % MOD;
      }
      divi++;
    }
    if ( num_a > 1 ) {
      p = num_a;
      e = num_b + 1;
      num = exp_rap( p, e );
      sumi = sumi * (( num - 1 ) / ( p - 1 )) % MOD;
    }

    fout = fopen( "sumdiv.out", "w" );
    fprintf( fout, "%d\n", sumi % MOD );
    fclose( fout );
    return 0;
}