Pagini recente » Cod sursa (job #1876092) | Cod sursa (job #1072067) | Cod sursa (job #2156188) | Cod sursa (job #1509198) | Cod sursa (job #687246)
Cod sursa(job #687246)
#include <fstream>
#include <vector>
#include <bitset>
using namespace std;
const char InFile[]="ssnd.in";
const char OutFile[]="ssnd.out";
const int SqrtMaxN=1000111;
const int MOD=9973;
ifstream fin(InFile);
ofstream fout(OutFile);
int T,nrd;
long long N,S;
bitset<SqrtMaxN> pciur;
vector<int> nrp;
inline void ciur()
{
pciur[1]=1;
pciur[2]=0;
nrp.push_back(2);
for(register int i=3;i<SqrtMaxN;i+=2)
{
if(pciur[i]==0)
{
nrp.push_back(i);
for(register int j=(i<<1);j<SqrtMaxN;j+=i)
{
pciur[j]=1;
}
}
}
}
inline int mypow(int A, int B)
{
A%=MOD;
int sol=1;
for(;B;B>>=1)
{
if(B&1)
{
sol*=A;
sol%=MOD;
}
A*=A;
A%=MOD;
}
return sol;
}
int main()
{
ciur();
fin>>T;
for(register int i=1;i<=T;++i)
{
fin>>N;
nrd=1;
S=1;
for(vector<int>::iterator it=nrp.begin();it!=nrp.end() && (long long)(*it)*(long long)(*it)<=N;++it)
{
if(N%(*it)==0)
{
N/=*it;
int e=1;
while(N%(*it)==0)
{
++e;
N/=*it;
}
nrd*=(e+1);
S*=mypow(*it,e+1)-1;
S%=MOD;
if(S<0)
{
S+=MOD;
}
S*=mypow(*it-1,MOD-2);
S%=MOD;
}
}
if(N>1)
{
nrd<<=1;
S*=(N+1)%MOD;
S%=MOD;
}
fout<<nrd<<" "<<S<<"\n";
}
fin.close();
fout.close();
return 0;
}