Cod sursa(job #3150606)

Utilizator moldovan_robert_lolMoldovan Robert moldovan_robert_lol Data 17 septembrie 2023 17:32:44
Problema Suma divizorilor Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.71 kb
#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;
	while (exp>0) {
		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;
	while (a>1) {
		int exp = 0;
		while (a%d==0) {
			exp += b;
			a /= d;
			exp %= (MOD-1);
		}
		ret *= (bin_pow(d,exp+1)-1)*bin_pow(d-1,MOD-2)%MOD;
		ret %= MOD;

		if (1LL*d*d>a) d = a;
	}
	return ret;
}

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