Cod sursa(job #700851)
#include <fstream>
#include <bitset>
#define NMAX 1000011
#define MOD 9973
using namespace std;
bitset <NMAX> viz;
long long N;
int T,K,P[NMAX];
void ciur(){
int i,j;
for(i=2;i<NMAX;i++)
if(viz[i]==0){
P[++K]=i;
for(j=i+i;j<NMAX;j+=i)
viz[j]=1;
}
}
int Pow_(int x, int y){
int sol,i;
x=x%MOD;
sol=1;
for(i=0; (1<<i)<=y; i++){
if( ((1<<i) & y)>0)
sol=(sol*x)%MOD;
x=(x*x)%MOD;
}
return sol;
}
int main(){
int nr,suma,p,p1,p2,i;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
in>>T;
ciur();
for(;T>0;--T){
in>>N;
nr=1, suma=1;
for(i=1;i<=K && 1LL*P[i]*P[i]<=N;i++){
if(N%P[i]) continue;
p=0;
while(N%P[i]==0){
N/=P[i];
p++;
}
nr*=(p+1);
p1 = (Pow_(P[i],p+1) - 1) % MOD;
p2 = Pow_(P[i]-1, MOD-2) % MOD;
suma=(((suma*p1)%MOD)*p2)%MOD;
}
if(N>1){
nr*=2;
suma=(1LL*suma*(N+1)%MOD);
}
out<<nr<<" "<<suma<<"\n";
}
in.close();
out.close();
return 0;
}