Pagini recente » Cod sursa (job #2714980) | Cod sursa (job #810183) | Cod sursa (job #1119121) | Cod sursa (job #2883252) | Cod sursa (job #2713997)
#include <fstream>
#define NMAX 1000000
#define MOD 9973
using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
bool c[NMAX + 5];
long long x;
int n,v[NMAX], p[NMAX/ 10 + 5], k;
int lgp(int a,int b)
{
int r = 1;
a%= MOD;
while( b > 0 )
{
if( b%2==1)
{
r *= a;
r %= MOD;
}
a*= a;
a%= MOD;
b/=2;
}
return r;
}
int main()
{
c[0] = c[1] = 1;
for( int i = 2; i <= NMAX; i++ )
{
if( c[i] == 0 )
{
p[++k] = i;
for( int j = i + i; j <= NMAX; j += i )
c[j] = 1;
}
}
for( int i = 1; i <= k; i++ )
v[ p[i] ] = lgp( p[i] - 1, MOD - 2 );
fin>>n;
for(; n--;)
{
fin >> x;
int nrd = 1,s = 1;
for( int i = 1; i <= k && 1LL * p[i] * p[i] <= x; i++ )
{
if( x % p[i] != 0 )
continue;
int exp = 0;
while( x % p[i] == 0 )
{
exp++;
x /= p[i];
}
if( exp == 0 )
continue;
nrd *= (exp + 1);
int y = lgp( p[i], exp + 1 ) - 1 + MOD;
if( y >= MOD )
y -= MOD;
s = ( ( ( s * y ) % MOD ) * v[ p[i] ] ) % MOD;
}
if( x != 1 )
{
nrd *=2;
s = ( 1LL * s * (x + 1) ) % MOD;
}
fout << nrd << " " << s << '\n';
}
return 0;
}