Cod sursa(job #2666149)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 1 noiembrie 2020 00:41:09
Problema Suma divizorilor Scor 90
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <stdlib.h>

#define MOD 9901

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, s;
    fin = fopen("sumdiv.in", "r");
    fscanf(fin, "%d%d", &a, &b);
    fclose(fin);
    if(0 < a){
      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 + MOD) % MOD) * put(d - 1, MOD - 2)) % MOD))) % MOD;
        }
        d++;
      }
      if(1 < a){
        if(((a - 1) % MOD) != 0){
          sdiv = (sdiv * ((((put(a, b + 1) - 1 + MOD) % MOD) * put(a - 1, MOD - 2)) % MOD)) % MOD;
        }else{
          d = 1;
          a %= MOD;
          s = 0;
          for(e = 0; e <= b; e++){
            s = (s + d) % MOD;
            d = (d * a) % MOD;
          }
          sdiv = (sdiv * s) % MOD;
        }
      }
    }else{
      if(b == 0){
        sdiv = 1;
      }else{
        sdiv = 0;
      }
    }
    fout = fopen("sumdiv.out", "w");
    fprintf(fout, "%d", sdiv);
    fclose(fout);
    return 0;
}