Pagini recente » Cod sursa (job #1650662) | Cod sursa (job #2317733) | Cod sursa (job #720358) | Cod sursa (job #2276339) | Cod sursa (job #1753938)
#include <bits/stdc++.h>
#define P 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bitset <1000000> a;
int prime[200005], k, f[20], expo[20], nrf;
void Ciur()
{
int i, j;
a[1] = 1;
for(i = 3; i * i <= 1000000; i += 2)
if(a[i] == 0)
{
prime[++k] = i;
for(j = i * i; j <= 1000000; j = j + i * 2)
a[j] = 1;
}
}
int RidPut(int baza, int exp)
{
int rez = 1;
while(exp > 0)
{
if(exp % 2 == 1)
{
rez = 1LL * baza * rez % P;
exp--;
}
baza = 1LL * baza * baza % P;
exp /= 2;
}
return rez;
}
void Rezolv(long long n)
{
k = 0;
Ciur();
nrf = 0;
int nrd = 1, d, e, i;
d = 2;
i = 1;
while(n > 1 && d * d <= n && i <= k)
{
if(n % d == 0)
{
f[++nrf] = d;
e = 0;
while(n % d == 0)
{
e++;
n /= d;
}
nrd *= (e + 1);
expo[nrf] = e + 1;
}
d = prime[++i];
}
if(n > 1)
{
f[++nrf] = n;
nrd *= 2;
expo[nrf] = 2;
}
int sd = 1;
for(int i = 1; i <= nrf; i++)
{
int x = 1LL * (RidPut(f[i], expo[i]) - 1) % P *
RidPut(f[i] - 1, P - 2) % P;
sd = 1LL * sd * x % P;
}
fout << nrd << " " << sd << "\n";
}
int main()
{
int test;
long long n;
fin >> test;
for(int i = 1; i <= test; i++)
{
fin >> n;
Rezolv(n);
}
fin.close();
fout.close();
return 0;
}