Pagini recente » Cod sursa (job #2189503) | Cod sursa (job #181063) | Cod sursa (job #804715) | Cod sursa (job #882933) | Cod sursa (job #449399)
Cod sursa(job #449399)
#include<iostream.h>
#include<fstream.h>
int v[ 1002000 ];
int inv[ 10000 ];
int prime[400000];
void prim(long long n, int &nr)
{
long long j=2,i ;
nr = 0;
while(j * j <= n)
{
if( v [ j ] != 1)
{
for(i = j;i * i <= n;i += j) v [ i ] = 1;
prime[ ++nr ] = j;
}
j++;
}
}
int inver( int i )
{
if( inv[ i ] ) return inv[i];
for( int j = 1; j < 9973; ++j)
if( i *j % 9973 == 1)
{ inv[ i] = j; inv[ j ] = i; return inv[i];}
return 0;
}
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( 1000000, 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++;
}
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;
int m;
m = (prime[i] + 9972) %9973;
q=q*inver(m) %9973;
}
if( n > 1)
p=p*2;
printf("%d %d\n", p , q );
--cazuri;
}
return 0;
}