Pagini recente » Cod sursa (job #1842869) | Cod sursa (job #2046974) | Cod sursa (job #1346633) | Cod sursa (job #801876) | Cod sursa (job #2149122)
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int v[1000001], pr[1000001], 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++)
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;
while(n % pr[ind] == 0)
{
exp++;
n/=pr[ind];
}
nrd = nrd * (exp + 1);
sumd=((sumd*(putere(pr[ind],exp+1)-1))%MOD*inversmodular(pr[ind]-1,MOD))%MOD;
ind++;
}
if(n>1)
{nrd*=2;
sumd=((sumd*(putere(n,2)-1))%MOD*inversmodular(n-1,MOD))%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;
}