Pagini recente » Cod sursa (job #1818532) | Cod sursa (job #1395481) | Cod sursa (job #3228818) | Cod sursa (job #1635050) | Cod sursa (job #1144726)
#include<fstream>
#define maxn 1000006
#define maxk 80004
#define ro 9973
using namespace std;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");
int p[maxk],k=0;
long long x;
int t,nd,sd;
bool b[maxn];
void eratostene(){
int i,j;
for(i=2;i<maxn;i++) b[i]=1;
for(i=2;i<maxn;i++)
if(b[i]){
p[++k]=i;
for(j=2*i;j<maxn;j+=i) b[j]=0;
}
}
int exponentiere(int a,int n){
int p=1;
while(n){
if(n%2) p=(p*a)%ro;
a=(a*a)%ro;
n/=2;
}
return p;
}
void descompun(long long x,int &nd,int &sd){
int r,i=1;
int p1,p2;
while(i<=k && 1LL*p[i]*p[i]<=x)
{
if(!(x%p[i])){
r=0;
while(!(x%p[i])){
x/=p[i];
r++;
}
nd*=(r+1);
//invers modular
p1=(exponentiere(p[i],r+1)-1)%ro;
p2=exponentiere(p[i]-1,ro-2)%ro;
sd=(((sd*p1)%ro)*p2)%ro;
}
i++;
}
//x ramane numar prim
if(x>1){
nd*=2;
sd=(1LL*sd*(x+1)%ro);
}
}
int main(){
eratostene();
fi>>t;
for(;t>0;t--){
fi>>x;
nd=1; sd=1;
descompun(x,nd,sd);
fo<<nd<<" "<<sd<<"\n";
}
fi.close();
fo.close();
return 0;
}