Cod sursa(job #2766506)

Utilizator DragosC1Dragos DragosC1 Data 1 august 2021 23:19:35
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <fstream>
#include <iostream>
using namespace std;

const int MOD = 9901;
int a, b;

void read() {
	ifstream f("sumdiv.in");
	f >> a >> b;
	f.close();
}

int S = 1; 

int exp(int a, int b) {
	int P = 1;
	while (b) {
		if (b & 1)
			P = (1LL * P * a) % MOD;
		a = (1LL * a * a) % MOD;
		b /= 2;
	}
	return P;
}

void solve() {
	int d = 2, p;
	while (a != 1) {
		p = 0;
		while (a % d == 0) {
			p++;
			a /= d;
		}
		if (p != 0) 
			S = (1LL * S * (exp(d, p * b + 1) - 1 + MOD) * exp(d - 1, MOD - 2)) % MOD;
		d++;
		if (d * d > a && a != 1) {
			S = (1LL * S * (exp(a, b + 1) - 1 + MOD) * exp(a - 1, MOD - 2)) % MOD;
			break;
		}
	}
}

void output() {
	ofstream g("sumdiv.out");
	g << (a == 0 ? 0 : S);
	g.close();
}

int main() {
	read();
	solve();
	output();
	return 0;
}