Cod sursa(job #3164598)

Utilizator moldovan_robert_lolMoldovan Robert moldovan_robert_lol Data 3 noiembrie 2023 19:37:55
Problema Suma divizorilor Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.8 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 int64_t MOD = 9901;

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

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

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

	return ret;
}

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