Cod sursa(job #2666134)

Utilizator teochess2017Togan Teodor-Bogdan teochess2017 Data 31 octombrie 2020 23:12:06
Problema Suma divizorilor Scor 70
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.14 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);
    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){
        sdiv = (sdiv * ((((put(a, b + 1) - 1 + MOD) % MOD) * put(a - 1, MOD - 2)) % MOD)) % MOD;
      }
    }else{
      if(b == 0){
        sdiv = 1;
      }else{
        sdiv = 0;
      }
    }
    fout = fopen("sumdiv.out", "w");
    fprintf(fout, "%d", sdiv);
    fclose(fout);
    return 0;
}