Cod sursa(job #3250217)

Utilizator n6v26rDedu Razvan Matei n6v26r Data 19 octombrie 2024 18:31:05
Problema Suma divizorilor Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>

#define MOD 9901

int expfast(int b, int e){
  int p = 1;
  while(e){
    if(e%2) p = p*b%MOD;
    b = b*b%MOD;
    e/=2;
  }
  return p;
}

int invmod(int val){
  return expfast(val, MOD-2);
}

int main(){
  int a, b;
  FILE *fin, *fout;
  fin = fopen("sumdiv.in", "r");
  fscanf(fin, "%d%d", &a, &b);
  fclose(fin);
  
  int sum = 1;
  int d = 2;
  while(d*d<=a){
    int exp =0;
    while(!(a%d)){
      exp++;
      a/=d;
    }
    if(exp){
      printf("%d %d\n", d, exp);
      sum = sum*(expfast(d, exp*b+1)-1)%MOD*invmod(d-1)%MOD;      
    }
    d++;
  }
  if(a>1){
    sum = sum*(expfast(a, 1+b)-1)%MOD*invmod(a-1)%MOD;
  }

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