Pagini recente » Cod sursa (job #622006) | Cod sursa (job #424481) | Cod sursa (job #1385591) | Cod sursa (job #675815) | Cod sursa (job #487906)
Cod sursa(job #487906)
#include<cstdio>
#include<cstring>
using namespace std;
const int DIM = 1000005;
const int MOD = 9973;
long long N;
int T, K, P[DIM];
char ciur[DIM];
void erast() {
int i, j;
for(i=2; i<DIM; i++) {
if(ciur[i]==0) {
P[++K]=i;
for(j=i*2; j<DIM; j+=i)
ciur[j]=1;
}
}
}
inline int pow(int x, int p) {
int sol=1;
x%=MOD;
for(; p; p/=2) {
if(p%2==1)
sol*=x, sol%=MOD;
x*=x, x%=MOD;
}
return sol;
}
void solve(long long N) {
int i, p1, p2, nd=1, sd=1, cnt;
for(i=1; i<=K && P[i]*P[i]<=N; i++) {
if(N%P[i])
continue;
cnt=0;
while(N%P[i]==0) {
N/=P[i];
++cnt;
}
nd*=(cnt+1);
p1=(pow(P[i],cnt+1)-1)%MOD;
p2=pow(P[i]-1,MOD-2)%MOD;
sd =((sd*p1)%MOD)*p2%MOD;
}
if(N>1) {
nd*=2;
sd=sd*(N+1)%MOD;
}
printf("%d %d\n",nd,sd);
}
int main() {
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
erast();
scanf("%d",&T);
while(T--) {
scanf("%lld",&N);
solve(N);
}
return 0;
}