Pagini recente » Cod sursa (job #1661015) | Cod sursa (job #1430069) | Cod sursa (job #162631) | Cod sursa (job #1658033) | Cod sursa (job #1032636)
# include <fstream>
# include <cmath>
# 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;
long long 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%MODULO << '\n';
}
inline int pow(int x, int p) {
int rez = 1;
x %= MODULO;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= MODULO;
}
x *= x;
x %= MODULO;
}
return rez;
}
void ssnd( int 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()
{
int a;
Ciur();
fin >> t;
for( int i = 1 ; i <= t ; ++i )
{
fin >> a;
ssnd(a);
}
fin.close();
fout.close();
return 0;
}