Cod sursa(job #2195868)

Utilizator flibiaVisanu Cristian flibia Data 17 aprilie 2018 16:04:19
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#pragma GCC optimize("03")
#include <bits/stdc++.h>
#define ll long long
#define MOD 9973

using namespace std;

ifstream in("ssnd.in");
ofstream out("ssnd.out");

int t;
ll n;
vector <int> primes;
bitset <1000100> viz;

void ciur(){
	for(int i = 2; i <= 1000000; i++)
		if(!viz[i]){
			primes.push_back(i);
			for(int j = i + i; j <= 1000000; j += i)
				viz[j] = 1;
		}	
}

ll lg(ll a, ll b){
	ll rs = 1;
	while(b){
		if(b & 1)
			rs = (rs * a) % MOD;
		a = (a * a) % MOD;
		b >>= 1LL;
	}
	return rs;
}

void solve(ll n){
	ll nr = 1, sum = 1;
	for(auto i : primes){
		if(1LL * i * i > n)
			break;
		if(n % i)
			continue;
		ll cnt = 0;
		while(n % i == 0)
			cnt++, n /= i;
		nr = (nr * (cnt + 1)) % MOD;
		sum = (sum * (lg(i, cnt + 1) - 1)) % MOD;
		sum = (sum * lg(i - 1, MOD - 2)) % MOD;
	}
	if(n > 1){
		nr = (nr * 2LL) % MOD;
		sum = (sum * (n + 1)) % MOD;
	}
	out << nr << ' ' << sum << '\n';
}	

int main(){
	ciur();
	in >> t;
	while(t--){
		in >> n;
		solve(n);
	}
	return 0;
}