Pagini recente » Cod sursa (job #2987979) | Cod sursa (job #1760592) | Cod sursa (job #1065770) | Cod sursa (job #1389063) | Cod sursa (job #1340487)
#include <cstdio>
#include <bitset>
#define prim 9973
#define MAXN 1000000
using namespace std;
int T,K,p[80000]; bool v[MAXN+5];
void sieve(){
int i,j;
p[++K]=2;
for (i=3; i<=MAXN; i+=2)
if (v[i]==0){
p[++K]=i;
for (j=2*i; j<=MAXN; j+=i)
v[j]=1;
}
}
inline int fpow(int x, int p){
int res=1;
while (p){
if (p&1)
res=(res*x)%prim;
x=(x*x)%prim;
p>>=1;
}
return res;
}
int main(){
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&T);
sieve();
int i,cnt,sum,pt,p1,p2; long long N;
while (T--){
scanf("%lld",&N);
cnt=sum=1;
for (i=1; i<=K && (N!=1LL) && 1LL*p[i]*p[i]<=N; i++)
if (N%p[i]==0){
pt=0;
while (N%p[i]==0) N/=p[i],pt++;
cnt*=(pt+1);
p1=(fpow(p[i]%prim,pt+1)-1+prim)%prim;
p2=fpow((p[i]-1)%prim,prim-2);
sum=(((sum*p1)%prim)*p2)%prim;
}
if (N!=1){
cnt*=2;
sum=(1LL*sum*(N+1))%prim;
}
printf("%d %d\n",cnt,sum);
}
return 0;
}