Pagini recente » Cod sursa (job #1987047) | Cod sursa (job #112825) | Arhiva de probleme | Cod sursa (job #488112) | Cod sursa (job #2149293)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
bool v[1000001];
int pr[79000], nr;
const int MOD = 9973;
void EuclidExtins(int a, int b, int &d, int &x, int &y)
{
int x1 = 0, y1 = 1;
x = 1, y = 0;
while(b != 0)
{
int q = a / b;
int r = a % b;
a = b;
b = r;
int x0 = x - x1 * q;
int y0 = y - y1 * q;
x = x1;
y = y1;
x1 = x0;
y1 = y0;
}
d = a;
}
int inversmodular(int A, int N)
{
int X, Y, d;
EuclidExtins(A, N, d, X, Y);
X %= N;
if(X < 0)X += N;
return X;
}
void ciur(long long n)
{
int i, j;
v[0] = 1;
v[1] = 1;
for(i = 4; i <= n; i += 2)
v[i] = 1;
for(i = 3; i * i <= n; i += 2)
{
if(v[i] == 0)
for(j = i * i; j <= n; j += i)
v[j] = 1;
}
pr[1] = 2;
nr = 1;
for(int i = 3; i <= n; i += 2)
if(v[i] == 0)
pr[++nr] = i;
}
int putere(int a, int p)
{
int x = 1;
while(p > 0)
if(p % 2 == 0)
{
a = (long long)a * a % MOD;
// a=1LL*a*a%MOD;
p /= 2;
}
else
{
x = (long long)x * a % MOD;
p--;
}
return x;
}
void sol(int n)
{
int nrd = 1, ind = 1, exp, sumd = 1;
while(ind <= nr && 1LL * pr[ind]*pr[ind] <= n)
{
exp = 0;
if(n % pr[ind] == 0)
{
while(n % pr[ind] == 0)
{
exp++;
n /= pr[ind];
}
nrd = 1LL * nrd * (exp + 1) % MOD;
sumd = 1LL * sumd * (putere(pr[ind], exp + 1) - 1 + MOD) % MOD * inversmodular(pr[ind] - 1, MOD) % MOD;
ind++;
}
else
ind++;
}
if(n > 1)
{
nrd = 2 * nrd % MOD;
sumd = 1LL * sumd * (n + 1) % MOD;
}
g << nrd << ' ' << sumd << '\n';
}
int main()
{
int t;
long long n;
ciur(1000000);
f >> t;
for(int i = 1; i <= t; i++)
{
f >> n;
sol(n);
}
return 0;
}