Pagini recente » Borderou de evaluare (job #3347863) | Borderou de evaluare (job #3355604) | Borderou de evaluare (job #3330249) | Borderou de evaluare (job #3344880) | Cod sursa (job #2981069)
#include <bits/stdc++.h>
#define MAX 500000
#define mod 9973
#define int long long
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
int primes[MAX + 5], q, x;
vector <bool> ciur(MAX + 5);
void compute_ciur()
{
primes[++primes[0]] = 2;
for(int i = 3;i <= MAX;i += 2)
{
if(!ciur[i >> 1])
{
primes[++primes[0]] = i;
for(int j = i + i + i;j <= MAX; j += i << 1)
ciur[j >> 1] = 1;
}
}
}
int expPower(int a, int b)
{
int ans = 1;
for(int i = 1;i <= b; ++i)
ans *= a;
return ans;
}
pair<int,int> solve(int & x)
{
int nr = 1, sum = 1;
for(int i = 1;i <= primes[0] && primes[i] * primes[i] <= x; ++i)
{
int cnt = 0;
while(!(x % primes[i]))
{
sum %= mod;
x /= primes[i];
cnt++;
}
sum = sum * ((expPower(primes[i], cnt + 1) - 1) / (primes[i] - 1));
sum %= mod;
nr *= (cnt + 1);
}
if(x != 1)
{
nr *= 2;
sum = sum * (expPower(x, 2) - 1) / (x - 1);
sum %= mod;
}
return {nr, sum};
}
signed main()
{
compute_ciur();
fin >> q;
while(q--)
{
fin >> x;
pair <int,int> ans = solve(x);
fout << ans.first << ' ' << ans.second % mod << '\n';
}
}