Cod sursa(job #2766508)

Utilizator DragosC1Dragos DragosC1 Data 1 august 2021 23:26:40
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 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");
	if (a == 0 && b == 0)
		g << 1;
	else if (a == 0)
		g << 0;
	else if (b == 0)	
		g << 1;
	else g << S;
	g.close();
}
 
int main() {
	read();
	solve();
	output();
	return 0;
}