Cod sursa(job #2666131)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 31 octombrie 2020 22:58:20
Problema Suma divizorilor Scor 60
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <stdio.h>
#include <stdlib.h>

#define MOD 9901

int x, y, d;

int put(int a, int p){
  int valret;
  if(0 < p){
    valret = put(a, p / 2);
    if((p % 2) == 1){
      valret = ((a * valret) % MOD * valret) % MOD;
    }else{
      valret = (valret * valret) % MOD;
    }
  }else{
    valret = 1;
  }
  return valret;
}

int main()
{
    FILE *fin, *fout;
    int a, b, d, e, sdiv;
    fin = fopen("sumdiv.in", "r");
    fscanf(fin, "%d%d", &a, &b);
    fclose(fin);
    d = 2;
    sdiv = 1;
    while((d * d) <= a){
      e = 0;
      while((a % d) == 0){
        e++;
        a /= d;
      }
      if(0 < e){
        sdiv = (sdiv * ((((put(d, b * e + 1) - 1) * put(d - 1, MOD - 2)) % MOD))) % MOD;
      }
      d++;
    }
    if(1 < a){
      sdiv = (sdiv * (((put(a, b + 1) - 1) * put(a - 1, MOD - 2)) % MOD)) % MOD;
    }
    fout = fopen("sumdiv.out", "w");
    fprintf(fout, "%d", sdiv);
    fclose(fout);
    return 0;
}