Cod sursa(job #3164595)

Utilizator moldovan_robert_lolMoldovan Robert moldovan_robert_lol Data 3 noiembrie 2023 19:35:17
Problema Suma divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#pragma message ("??????????")

#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>

std::ifstream fin("sumdiv.in");
std::ofstream fout("sumdiv.out");

const int MOD = 9901;

int bin_pow(int base, int exp) {
	int ret = 1;
	base %= MOD;
	while (exp) {
		if (exp&1) ret = 1LL*ret*base%MOD;
		base = 1LL*base*base%MOD;
		exp >>= 1;
	}
	return ret;
}

int sol(int a, int b) {
	if (!b) return 1;

	//b %= (MOD-1);
	int ret = 1;
	int d = 2;
	for (int d = 2; d*d <= a; d++) {
		int exp = 0;
		while (a%d==0) {
			exp += b;
			a /= d;
		}
		ret *= 1LL*(bin_pow(d,exp+1)-1)*bin_pow(d-1,MOD-2)%MOD;
		ret %= MOD;
	}

	if (a>1) {
		ret *= 1LL*(bin_pow(a,b+1)-1)*bin_pow(a-1,MOD-2)%MOD;
		ret %= MOD;
	}

	return ret;
}

int main() {
	int a, b;
	fin >> a >> b;
	fout << sol(a,b) << "\n";
}