Pagini recente » Cod sursa (job #1694) | Cod sursa (job #352892) | Cod sursa (job #1264648) | Cod sursa (job #2004707) | Cod sursa (job #2403969)
#include <bits/stdc++.h>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
//----------------------------
//Variabile globale
vector<int>v;
int mod = 9973;
//----------------------------
//Functii
void ciur();
void citire();
void rezolva(long long);
long long putere(long long,int);
long long invers_modular(long long);
//----------------------------
int main()
{
ciur();
citire();
return 0;
}
//----------------------------
void ciur()
{
bool prim[1000001] = {0};
int nr = 1000000;
for(int i = 2 * 2; i <= nr; i += 2)
prim[i] = 1;
v.push_back(2);
for(int i = 3; i * i <= nr; i += 2)
if(prim[i] == 0)
{
v.push_back(i);
for(int j = i * i; j <= nr; j += 2 * i)
prim[j]=1;
}
for(int i = 1001; i <= nr; i += 2)
if(prim[i] == 0)
v.push_back(i);
}
//----------------------------
long long putere(long long a,int b)
{
if(b==1)
return a;
if(b == 0)
return 1;
if(b % 2 == 0)
return putere((a * a) % mod,b / 2);
return (a*putere((a * a) % mod,b / 2)) % mod;
}
//----------------------------
long long invers_modular(long long x)
{
return putere(x,mod - 2);
}
//----------------------------
void citire()
{
int t;
f >> t;
while(t--)
{
long long x;
f >> x;
rezolva(x);
}
}
//----------------------------
void rezolva(long long x)
{
long long a = 1,b = 1,c = 1;
for(int i = 0; i < v.size() && v[i] * v[i] <= x; ++i)
if(x % v[i] == 0)
{
int p = v[i] % mod;
long long p2 = 1;
int d = 0;
while(x % p == 0)
{
x /= p;
p2 = (p2 * p) % mod;
d++;
}
p2 = (p2 * p) % mod;
p2--;
if(p2 < 0)
p2 += mod;
p--;
if(p < 0)
p += mod;
a *= d + 1;
b = (b * p2) % mod;
c = (c * p) % mod;
}
if(x != 1)
{
long long p2,p,d;
p = x % mod;
p2 = (p * p) % mod;
d = 1;
p2--;
if(p2 < 0)
p2 += mod;
p--;
if(p < 0)
p += mod;
a *= d + 1;
b = (b * p2) % mod;
c = (c * p) % mod;
}
g << a << " " << (b * invers_modular(c)) % mod << '\n';
}