Pagini recente » Cod sursa (job #573635) | Cod sursa (job #1423948) | Cod sursa (job #2199871) | Cod sursa (job #436444) | Cod sursa (job #620340)
Cod sursa(job #620340)
#include <stdio.h>
const int NMAX = 1000005;
const int MOD = 9973;
int nrPrime, prime[NMAX], viz[NMAX];
void ciur();
inline int pow(int x, int p) {/////////////////
int rez = 1;
x %= MOD;
for(; p; p >>= 1) {
if(p & 1) {
rez *= x;
rez %= MOD;
}
x *= x;
x %= MOD;
}
return rez;
}
int main()
{
int p, t, d, sd, p1, p2, i;
long long n;
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
ciur();
scanf("%d", &t);
for (; t>0; t--)
{
scanf("%lld", &n);
i=1;
d=1;
sd=1;/////
while ((i<=nrPrime) && (1LL*prime[i]*prime[i]<=n))
{
p=0;
while ((n%prime[i])==0)
{
n/=prime[i];
p++;
}//while
d*=p+1;
p1 = (pow(prime[i], p+1) - 1) % MOD;////
p2 = pow(prime[i]-1, MOD-2) % MOD;///
sd = (((sd * p1) % MOD) * p2) % MOD;////
i++;
}//while i
if (n>1)
{
d*=2;
sd = (1LL*sd*(n+1) % MOD);
}//if
printf("%d %d\n", d, sd);
}//for t
return 0;
}//main
void ciur()
{
int i, j;
nrPrime=0;
for (i=2; i<NMAX; i++)
{
if (viz[i]==0)
{
prime[++nrPrime]=i;
for (j=i+1; j<NMAX; j+=i)
viz[j]=1;
}//if
}//for i
}//ciur