Cod sursa(job #3146465)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 21 august 2023 11:30:59
Problema Suma divizorilor Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
#define mod 9901

using namespace std;

ifstream fin("sumdiv.in");
ofstream fout("sumdiv.out");
int a, b, r = 1, d, e;

static inline int put(int a, int b) {
    int p = 1;
    while(b) {
        if(b & 1) p = (p * a) % mod;
        a = (a * a) % mod;
        b >>= 1;
    }
    return p;
}

static inline int invMod(int x) {
    return put(x, mod - 2);
}

int main() {
	fin >> a >> b;
	while((a & 1) == 0){
		a >>= 1;
		e++;
	}
	if(e) r = r * (put(2, b * e + 1) + mod - 1) % mod;

	d = 3;
	while(d * d <= a) {
        e = 0;
		while(a % d == 0){
			a /= d;
			e++;
		}
		if(e) {
			if(d % mod == 1) r = (r * (e * b + 1)) % mod;
			else if(d % mod) r = r * (put(d, e * b + 1) + mod - 1) % mod * invMod(d - 1) % mod;
		}
		d += 2;
	}
	if(a > 1) {
		if(a % mod == 1) r = (r * (1 * b + 1)) % mod;
		else if(a % mod) r = r * (put(a, 1 * b + 1) + mod - 1) % mod * invMod(a - 1) % mod;
	}
    fout << r;

    return 0;
}