Cod sursa(job #3134012)

Utilizator IanisBelu Ianis Ianis Data 27 mai 2023 21:19:25
Problema Suma si numarul divizorilor Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#pragma GCC optimize("Ofast,unroll-loops")

#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#define debug(x) cerr << #x << " = " << x << endl
#else
#define debug(x)
#endif

#define endl '\n'

#define sz(a) ((int)(a).size())
#define all(a) (a).begin(), (a).end()
#define erase_unique(a) sort(all(a)); (a).erase(unique(all(a)), (a).end())

#define f first
#define s second

#define YES cout << "YES" << endl
#define NO cout << "NO" << endl

#define lsb(x) (x & (-x))

#define FILE_NAME "ssnd"

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;

const int VMAX = 1e6+5;
const int MOD  = 9973;

ll n;
bool ciur[VMAX];
vector<int> primes;

void read() {
	cin >> n;
}

void precalc() {
	for (int i = 2; i < VMAX; i++) {
		if (!ciur[i]) primes.push_back(i);
		for (int j = 0; 1ll * i * primes[j] < VMAX; j++) {
			ciur[i * primes[j]] = 1;
			if (i % primes[j] == 0) break;
		}
	}
}

void solve() {
	ll cnt_div = 1, sum_div = 1;
	
	for (int i = 0; i < sz(primes) && 1ll * primes[i] * primes[i] <= n; i++) {
		int e = 0;
		ll p = 1;
		while (n % primes[i] == 0) {
			e++;
			n /= primes[i];
			p *= 1ll * primes[i];
		}
		if (e) {
			cnt_div *= 1ll * (e + 1);
			sum_div *= 1ll * (1ll * p * primes[i] - 1) / (primes[i] - 1);
			cnt_div %= MOD;
			sum_div %= MOD;
		}
	}

	if (n != 1) {
		cnt_div *= 2ll;
		sum_div *= 1ll * (1ll * n * n - 1) / (n - 1);
		cnt_div %= MOD;
		sum_div %= MOD;
	}

	cout << cnt_div << ' ' << sum_div << endl;
}

signed main() {
#ifdef LOCAL
	freopen("input.txt", "r", stdin);
#else
	freopen(FILE_NAME ".in", "r", stdin);
	freopen(FILE_NAME ".out", "w", stdout);
#endif
	int t = 1;
	cin >> t;
	precalc();
	while (t--) {
		read();
		solve();
	}
	return 0;
}