Pagini recente » Cod sursa (job #356274) | Cod sursa (job #1425570) | Cod sursa (job #1845786) | Cod sursa (job #398861) | Cod sursa (job #2042059)
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const long long NMax = 1000005;
const long long mod = 9973;
char ciur[NMax];
int primes[NMax];
long long N;
pair < long, long > euclid_extins(long long x, long y)
{
if(y==0)
{
return {1,0};
}
auto aux = euclid_extins(y,x%y);
long long rap = x/y;
return {aux.second, aux.first - rap * aux.second};
}
void Ciuruletz()
{
for(long long i=3; i<=NMax; i+=2)
{
if(!ciur[i])
{
for(long long j=i; j*i<=NMax; j+=2)
ciur[i*j] = 1;
}
}
int k = 0;
primes[++k] = 2;
for(int i=3; i<=NMax; i+=2)
if(ciur[i]==0)
primes[++k] = i;
}
long long RidExp(long long nr, long long put)
{
long long rez = 1;
do
{
if(put & 1)
rez = (nr*rez)%mod;
nr = (nr*nr)%mod;
put = put >> 1;
}
while(put);
return rez;
}
void Solve(long long x)
{
long long ind = 1;
long long nr_div = 1;
long long sum = 1;
while(primes[ind] * primes[ind] <= x)
{
long long po = 0;
while(x%primes[ind] == 0)
{
++po;
x/=primes[ind];
}
if(po)
{
nr_div *= 1LL * (po+1);
long long pk = primes[ind];
long long nom = (RidExp(1LL * pk, 1LL * po+1) - 1)%mod;
long long nr = (1LL * euclid_extins(1LL * pk - 1,1LL * mod).first)%mod;
sum = 1LL * (sum * nom) % mod;
while(nr<0)
{
nr+= mod;
}
sum = 1LL * (sum * nr) % mod;
}
++ind;
}
if(x!=1)
{
nr_div *= (1LL * 2)%mod;
sum *= 1LL * (x+1) % mod;
}
fout << nr_div%mod << " " << sum% mod<< "\n";
}
void Read()
{
long long t;
fin >> t;
for(long long i=1; i<=t; ++i)
{
long long x;
fin >> x;
Solve(x);
}
}
int main()
{
Ciuruletz();
Read();
return 0;
}