Pagini recente » Cod sursa (job #1767987) | Cod sursa (job #438004) | Cod sursa (job #371322) | Cod sursa (job #1951445)
#include<fstream>
#include<bitset>
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
const int CMax = 1000005;
const int MOD = 9973;
long long T,K,N,Nr,Sum;
long long Prim[CMax];
bitset <CMax> Ciur;
void Sieve()
{
for(int i = 2 ; i < CMax ; ++i)
if(!Ciur[i])
{
Prim[++K] = i;
for(int j = i + i ; j < CMax ; j += i)
Ciur[j] = 1;
}
}
inline int put(int x,int p)
{
int sol = 1;
x %= MOD;
while(p)
{
if(p & 1) sol = (sol * x) % MOD;
x = (x * x) % MOD;
p >>= 1;
}
return sol;
}
void Solve()
{
Nr = Sum = 1;
for(int i = 1 ; i <= K && (1LL * Prim[i] * Prim[i]) <= N ; ++i)
{
if(N % Prim[i]) continue;
int pow = 1;
while(!(N % Prim[i]))
{
N /= Prim[i];
pow++;
}
Nr *= pow;
int up,down;
up = (put(Prim[i],pow) - 1) % MOD;
down = put(Prim[i] - 1,MOD - 2) % MOD;
Sum = (((Sum * up) % MOD) * down) % MOD;
}
if(N > 1)
{
Nr *= 2;
Sum = (1LL * Sum * (N + 1)) % MOD;
}
}
int main()
{
Sieve();
fin>>T;
while(T--)
{
fin>>N;
Solve();
fout<<Nr<<" "<<Sum<<"\n";
}
fin.close();
fout.close();
return 0;
}