Pagini recente » Cod sursa (job #2335906) | Cod sursa (job #1704110) | Cod sursa (job #2691242) | Cod sursa (job #2721939) | Cod sursa (job #2823377)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
const int mod = 9973;
const int lim = 1e6;
bitset<lim + 5>ciur;
int primes[lim + 5] , n;
long long x;
int ridica (int a , int b)
{
int p = 1 , q = a;
while(b)
{
if (b % 2 == 1)
{
p = ((p % mod) * (a % mod)) % mod;
}
b = b / 2;
a = ((a % mod) * (a % mod)) % mod;
}
return ((p - 1) / (q - 1)) % mod;
}
void eratostene()
{
int k = 0;
for (int i=4; i<=lim; i+=2) ciur[i] = 1;
for (int i=3; i*i<=lim; i+=2)
{
if (ciur[i] == 0)
{
for (int j=i*i; j<=lim; j+=i) ciur[j] = 1;
}
}
primes[k++] = 2;
for (int i=3; i<=lim; i+=2) if (ciur[i] == 0) primes[k++] = i;
}
void solve (long long x)
{
long long d = 0 , p = 0 , ans = 1 , sum = 1;
while (x > 1)
{
p = 0;
while (x % primes[d] == 0) x = x / primes[d] , p++;
if (p)
{
ans = ans * (p + 1);
sum = (sum * ridica(primes[d], p + 1)) % mod;
}
d++;
if (primes[d] * primes[d] > x && x > 1)
{
ans = ans * 2;
sum = (sum * ridica(x , 2)) % mod;
break;
}
}
fout << ans << " " << sum << '\n';
}
int main()
{
eratostene();
fin >> n;
for (int i=1; i<=n; i++)
{
fin >> x;
solve(x);
}
}