Pagini recente » Cod sursa (job #2624799) | Cod sursa (job #690052) | Cod sursa (job #1905049) | Cod sursa (job #1288078) | Cod sursa (job #457737)
Cod sursa(job #457737)
#include<iostream.h>
#include<fstream.h>
#include<math.h>
int v[ 1002000 ];
int inv[ 10000 ];
int prime[400000];
void invers(long a, long b, long &d, long &x, long &y)
{
if (b == 0)
{
d = a;
x = 1;
y = 0;
}
else
{
long x0, y0;
invers(b, a % b, d, x0, y0);
x = y0;
y = x0 - (a / b) * y0;
}
}
void prim(long long n, int &nr)
{
long long j=2,i ;
nr = 0;
long p = sqrt( n ) ;
prime[ ++nr ] = 2;
j = 3;
while(j <= p)
{
if( v [ j ] != 1)
{
for(i = j * j;i <= p;i += 2 * j) v [ i ] = 1;
prime[ ++nr ] = j;
}
j += 2;
}
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
long long n;
int k, nr_prime = 0, cazuri,p=1,s,q;
scanf("%d\n", &cazuri);
prim( 1000000000000ll, nr_prime);
while( cazuri )
{
p = 1; q = 1;
scanf("%lld", &n);
for (int i = 1; i <= nr_prime && n > 1; i ++)
{
k =0;
while( n % prime[i] == 0)
{
n = n / prime[i];
k++;
}
if( k )
{
p=p*(k+1);
s = 1;
for(int j=1;j<=k+1;j++)
s =( s * prime[i] ) % 9973;
s = (s +9972) %9973 ;
q = (q * s) % 9973;
long m,d,y,x;
m = (prime[i] + 9972) % 9973;
invers(m,9973,d,x,y);
x = (x + 997300000) % 9973;
q = q * x % 9973;
}
}
if( n > 1)
{
s=1;
p = (p * 2) % 9973;
q = (q* ( n + 1)) % 9973;
}
printf("%d %d\n", p , q );
--cazuri;
}
return 0;
}