Cod sursa(job #3121675)

Utilizator daristyleBejan Darius-Ramon daristyle Data 14 aprilie 2023 18:21:26
Problema Suma divizorilor Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <fstream>
 
using namespace std;
 
ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
 
const int MOD = 9901;
 
int lgput(int b, int e, int mod) {
	int pow = 1;
	b %= mod;
	while(e){
		if(e & 1)
			pow = (pow * b) % mod;
		b = (b * b) % mod;
		e >>= 1;
	}
 
	return pow;
}
 
int invmod(int a, int mod) {
	if(a%mod==0)	fout<<"adfeewgr";
	return lgput(a, mod - 2, mod);
}
 
int main() {
	int a, b;
	fin >> a >> b;
	int sum_div = 1, d = 3, p = 0;
	while(!(a & 1)){
		a >>= 1;
		++p;
	}
	if(p){
		sum_div = sum_div * (lgput(2, b * p + 1, MOD) + MOD - 1) % MOD;
		sum_div = sum_div * invmod(1, MOD) % MOD;
	}
 
	while(d * d <= a){
		p = 0;
		while(a % d == 0){
			a /= d;
			++p;
		}
		if(p)
			sum_div = sum_div * (lgput(d, p * b + 1, MOD) + MOD - 1) % MOD * invmod(d - 1, MOD) % MOD;
 
		d += 2;
	}
 
	if(a > 1)
		sum_div = sum_div * (lgput(a, 1 * b + 1, MOD) + MOD - 1) % MOD * invmod(a - 1, MOD) % MOD;
 
	fout << sum_div << '\n';
 
	fin.close();
	fout.close();
	return 0;
}