Pagini recente » Cod sursa (job #3191123) | Cod sursa (job #927529) | Cod sursa (job #1631578) | Cod sursa (job #1613131) | Cod sursa (job #600054)
Cod sursa(job #600054)
#include <stdio.h>
#include <bitset>
#define Nmare 1000005
#define MOD 9973
using namespace std;
int t,K,P[Nmare];
long p,crt,i,j,nr[1001];
bitset <Nmare> ciur;
void creare_ciur (void)
{
for (i=2; i<=Nmare; i++)
if (!ciur[i])
{
P[++K]=i;
for (j=i+i; j<=Nmare; j+=i) ciur[j]=1;
}
}
/*int pow (int x,int y)
{
int rez=1;
for(;y>0;y--) rez=(rez*x);
return rez;
}*/
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;
}
void rezolvare (void)
{
scanf("%d", &crt);
long nr=1,S=1,N=crt;
if (crt==1) printf("1 1\n");
else
{
for (i=1; i<=K && P[i]*P[i]<=N; i++)
{
p=0;
while (crt%P[i]==0) {p++; crt/=P[i];}
if (p)
{
nr=(p+1)*nr;
//S=(S*(pow(P[i],p+1)-1)/(P[i]-1));
int p1 = (pow(P[i], p+1) - 1) % MOD;
int p2 = pow(P[i]-1, MOD-2) % MOD;
S = (((S * p1) % MOD) * p2) % MOD;
}
}
if (crt>1)
{
nr*=2;
S=S*(crt+1) % MOD;
}
printf("%d %d\n", nr,S);
}
}
int main ()
{
creare_ciur();
freopen("ssnd.in", "r",stdin);
freopen("ssnd.out", "w",stdout);
scanf("%d", &t);
for (; t>0; t--) rezolvare();
return 0;
}