Cod sursa(job #3250218)

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

#define MOD 9901

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

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

int main(){
  long long a, b;
  FILE *fin, *fout;
  fin = fopen("sumdiv.in", "r");
  fscanf(fin, "%lld%lld", &a, &b);
  fclose(fin);
  
  long long sum = 1;
  long long d = 2;
  while(d*d<=a){
    long long exp =0;
    while(!(a%d)){
      exp++;
      a/=d;
    }
    if(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, "%lld\n", sum);
  fclose(fout);
  return 0;
}