Cod sursa(job #1925750)

Utilizator TincaMateiTinca Matei TincaMatei Data 13 martie 2017 17:28:31
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

const int MOD = 9901;

int pow2(int b, int e) {
  int acum = 1;
  b = b % MOD;
  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) {
  if(x == 0) return 1;
  else if(x % 2 == 0) return (1 + p * smec(p, x - 1)) % MOD;
  else return smec(p, x / 2) * (1 + pow2(p, (x + 1) / 2)) % MOD;
}

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

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

	if(a > 1)
	  rez = rez * smec(a % MOD, b) % MOD;
	FILE *fout = fopen("sumdiv.out", "w");
	fprintf(fout, "%d", rez);
	fclose(fout);
	return 0;
}