Pagini recente » Cod sursa (job #719474) | Cod sursa (job #430778) | Cod sursa (job #535128) | Cod sursa (job #2644785) | Cod sursa (job #2713996)
#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/ 5 + 5], k;
int lgp(int a,int b)
{
long long rez= 1;
while(b)
{
if(b % 2)
rez = rez* a % MOD, b--;
else
a = 1LL * a * a % MOD, b /= 2;
}
return rez;
}
int main()
{
c[0] = c[1] = 1;
for( int i = 1; 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;
}