Cod sursa(job #1925655)

Utilizator TincaMateiTinca Matei TincaMatei Data 13 martie 2017 15:30:09
Problema Suma divizorilor Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <cstdio>

const int MOD = 9901;

int pow(int b, int e) {
  int acum = 1;
  while(e > 0) {
    if(e % 2 == 1)
      acum = acum * b % MOD;
		b = b * b % MOD;
		e = e / 2;
  }
  return acum;
}

int smec(int p, int x) {
  return (pow(p % MOD, x + 1) - 1 + MOD) * pow((p - 1) % MOD, MOD - 2) % MOD;
}

int main() {
  int a, b, rez;
	FILE *fin = fopen("sumdiv.in", "r");
	fscanf(fin, "%d%d", &a, &b);
	fclose(fin);

	int d = 2;
	rez = 1;
	while(d * d <= a) {
	  int e = 0;
	  while(a % d == 0) {
	    a = a / d;
	    ++e;
	  }
	  rez = rez * smec(d, e * b) % MOD;
	  ++d;
	}

	if(a > 1)
	  rez = rez * smec(a, b) % MOD;

	FILE *fout = fopen("sumdiv.out", "w");
	fprintf(fout, "%d", rez);
	fclose(fout);
	return 0;
}