Pagini recente » Borderou de evaluare (job #629852) | Borderou de evaluare (job #2017519) | Cod sursa (job #3002930) | Borderou de evaluare (job #1703310) | Cod sursa (job #3226298)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
const int dim=1e6,mod=9973;
bool ciur[dim+2];
vector<int>nrp;
int p,t,s,d;
long long n;
int exp(int a,int b){
int p=1;
while(b!=0){
if(b%2!=0)
p=1LL*a*p%mod;
b/=2;
a=1LL*a*a%mod;
}
return p;
}
int main()
{
ciur[0]=ciur[1]=1;
for(int i=2;i<=dim;i++)
if(!ciur[i]){
nrp.push_back(i);
p++;
for(int j=2*i;j<=dim;j+=i)
ciur[j]=1;
}
cin>>t;
while(t--){
cin>>n;
s=d=1;
for(int i=0;i<p&&1LL*nrp[i]*nrp[i]<=n;i++)
if(n%nrp[i]==0){
int e=0;
long long x=nrp[i];
while(n%nrp[i]==0){
n/=nrp[i];
e++;
x*=nrp[i];
}
x=(x-1)%mod;
s=1LL*s*x%mod*exp(nrp[i]-1,mod-2)%mod;
d*=(e+1);
}
if(n!=1){
s=1LL*s*(1LL*n*n-1)%mod*exp(n-1,mod-2)%mod;
d*=2;
}
cout<<d<<" "<<s<<'\n';
}
return 0;
}