Pagini recente » Cod sursa (job #1909047) | Cod sursa (job #2148864) | Cod sursa (job #1757950) | Cod sursa (job #3155300) | Cod sursa (job #2189829)
#include <iostream>
#include <fstream>
#include <bitset>
#define NMAX 1000003
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int t;
long long N;
int Prime[NMAX];
int NP;
bitset <NMAX> v;
void Ciur()
{
for(int i=2;i<NMAX;i++)
{
if (v[i] == 0)
{
Prime[++NP] = i;
for(int j=i+i;j<NMAX;j+=i)
v[j] = 1;
}
}
}
int pow(int x,int p)
{
int rez = 1;
x %= MOD;
while(p)
{
if (p % 2)
{
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
p /= 2;
}
return rez;
}
void Solve()
{
fin>>N;
int nrFact = 1;
int suma = 1;
for(int i=1;i<=NP && 1LL*Prime[i]*Prime[i] <= N;i++)
{
if (N%Prime[i] != 0)
continue;
int p = 0;
while(N%Prime[i] == 0)
{
p++;
N /= Prime[i];
}
nrFact *= (p + 1);
int a,b;
a = (pow(Prime[i],p+1) - 1) % MOD;
b = pow(Prime[i]-1, MOD-2) % MOD;
suma = (((suma*a)%MOD)*b)%MOD;
}
if (N > 1)
{
nrFact *= 2;
suma = (suma*(N+1)) % MOD;
}
fout<<nrFact<<' '<<suma<<endl;
}
int main()
{
Ciur();
fin>>t;
for(int i=0;i<t;i++)
{
Solve();
}
return 0;
}