Pagini recente » Cod sursa (job #1451338) | Istoria paginii runda/oji200911/clasament | Monitorul de evaluare | Cod sursa (job #1449779) | Cod sursa (job #580430)
Cod sursa(job #580430)
#include <fstream>
using namespace std;
const char InFile[]="ssnd.in";
const char OutFile[]="ssnd.out";
const int MaxN=1000100;
const int MOD=9973;
ifstream fin(InFile);
ofstream fout(OutFile);
int nrd,t,sum;
long long n;
char pciur[MaxN];
int nrp[MaxN];
inline void ciur()
{
for(register int i=2;i<MaxN;++i)
{
if(pciur[i]==0)
{
nrp[++nrp[0]]=i;
for(register int j=i<<1;j<=MaxN;j+=i)
{
pciur[j]=1;
}
}
}
}
inline int mypow(int A, int B)
{
int sol=1;
for(;B;B>>=1)
{
if((B&1)==1)
{
sol*=A;
sol%=MOD;
}
A*=A;
A%=MOD;
}
return sol;
}
int main()
{
ciur();
fin>>t;
for(register int i=0;i<t;++i)
{
fin>>n;
nrd=1;
sum=1;
for(register int j=1;(long long)(nrp[j])*(long long)(nrp[j])<=n;++j)
{
if(N%nrp[j])
{
continue;
}
int p=0;
while(n%nrp[j]==0)
{
++p;
n/=nrp[j];
}
nrd*=(p+1);
sum*=mypow(nrp[j],p+1)-1;
sum%=MOD;
sum*=mypow(nrp[j]-1,MOD-2);
sum%=MOD;
}
if(n>1)
{
nrd<<=1;
n%=MOD;
sum*=(n*n-1)/(n-1);
sum%=MOD;
}
fout<<nrd<<" "<<sum<<"\n";
}
fout.close();
fin.close();
return 0;
}