Pagini recente » Cod sursa (job #725081) | Cod sursa (job #3038913) | Cod sursa (job #556148) | Cod sursa (job #1077636) | Cod sursa (job #1033521)
# include <fstream>
# include <cmath>
# define ll long long
# define MODULO 9973
# define NMax 1000005
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
short t;// 10^3
bool p[NMax];
int fact[NMax],ind;
/*
p[i] = 0 , daca i este prim
*/
int NrDiv,SDiv;
void Ciur()
{
int i,j;
for( i = 2 ; i*i < NMax ; ++i )
if( !p[i] )
{
fact[++ind] = i;
for( j = i+i ; j < NMax ; j += i )
p[j] = 1;
}
}
void Tipar()
{
fout << NrDiv << ' ' << SDiv << '\n';
}
inline int pow(int x, int p) {
int rez = 1;
x %= MODULO;
for(; p; p >>= 1) {
if(p & 1)
rez = (rez*x)%MODULO;
x = (x*x)%MODULO;
}
return rez;
}
void ssnd( ll x )
{
NrDiv=SDiv=1;
int d;
for( int i = 1 ; i <= ind && 1LL*fact[i]*fact[i] <= x ; ++i )
{
if( x % fact[i] ) continue;
d = 0;
while( x % fact[i] == 0 )
{
x /= fact[i];
++d;
}
NrDiv *= (d+1);
int p1 = (pow(fact[i], d+1) - 1) % MODULO;
int p2 = pow(fact[i]-1, MODULO-2) % MODULO;
SDiv = (((SDiv * p1) % MODULO) * p2) % MODULO;
}
if( x > 1 )
{
NrDiv *= 2;
SDiv = (1LL*SDiv*(x+1)%MODULO);
}
Tipar();
}
int main()
{
ll a;
Ciur();
fin >> t;
for( int i = 1 ; i <= t ; ++i )
{
fin >> a;
ssnd(a);
}
fin.close();
fout.close();
return 0;
}