Pagini recente » Cod sursa (job #425042) | Cod sursa (job #54870) | Cod sursa (job #634307) | Cod sursa (job #3258556) | Cod sursa (job #2086071)
#include <fstream>
#include <cstring>
#define file "ssnd"
#define N 1000000
#define MOD 9973
using namespace std;
ifstream fin(file".in");
ofstream fout(file".out");
long long t,n;
long long p;
long long prim[N+3],doarprim[N/2],pn; // 0 - prim 1 -Neprim
inline long long rid_log(const long long &A,const long long &B)
{
if(B == 1) return A;
else if(B < 1) return 1;
long long sol = rid_log(A,B/2);
if(B%2) return ((sol*sol)%MOD * A)%MOD;
else return (sol*sol)%MOD;
}
inline long long inv_mod(long long X)
{
return rid_log(X,MOD-2);
}
void Ciur()
{
prim[1] = 1;
doarprim[++pn] = 2;
for(int i=4; i<=N; i+=2)
prim[i] = 1;
for(int i=3; i*i <= N; i+=2)
if(!prim[i])
{
for(int d = i*i; d<=N; d += 2*i)
prim[d] = 1;
}
for(int i=3; i<=N; ++i)
if(!prim[i])
doarprim[++pn] = i;
}
void afis_ciur()
{
for(int i=1; i<=pn; ++i)
fout<<doarprim[i]<<" ";
fout<<endl;
}
inline void desc()
{
long long sola,solb;
sola = solb = 1;
for(long long i=1; i <= pn && 1LL * doarprim[i]*doarprim[i] <= n; ++i)
{
p = 0;
while(n % doarprim[i] == 0) ++p, n/=doarprim[i];
if(p > 0)
{
sola = (sola*(p+1))%MOD;
solb = (solb*((rid_log(doarprim[i],p+1) - 1) * inv_mod(doarprim[i]-1) % MOD) ) %MOD;
}
}
if(n > 1)
sola = (sola*2)%MOD,
solb = (solb*(n+1)) %MOD;
fout<<sola<<" "<<solb<<"\n";
}
int main()
{
Ciur();
fin>>t;
while(t--)
{
fin>>n;
desc();
//afis();
}
fin.close();
fout.close();
return 0;
}