Pagini recente » Cod sursa (job #2691391) | Cod sursa (job #1785912) | Cod sursa (job #1775152) | Cod sursa (job #1237406) | Cod sursa (job #1649146)
#include <cstdio>
using namespace std;
const int lim=1000000,mod=9973;
int prim[lim];
char vaz[lim+10];
int rid_put(int a,int n)
{
int p=1;
for(int i=1;i<=n;i<<=1)
{
if(n&i) p=(1LL*p*a)%mod;
a=(1LL*a*a)%mod;
}
return p;
}
int main()
{
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
int nr=0,t;
for(int i=2;i<=lim;i++)
if(!vaz[i])
{
prim[++nr]=i;
if(1LL*i*i<=lim)
for(int j=i*i;j<=lim;j+=i) vaz[j]=1;
}
for(scanf("%d",&t);t;t--)
{
long long n,sol1=1;
int sol2=1;
scanf("%lld",&n);
for(int i=1;i<=nr && 1LL*prim[i]*prim[i]<=n;i++)
if(n%prim[i]==0)
{
int a=0;
for(;n%prim[i]==0;n/=prim[i]) a++;
sol1*=a+1;
sol2=(1LL*((1LL*sol2*(rid_put(prim[i],a+1)-1))%mod)*rid_put(prim[i]-1,mod-2))%mod;
}
if(n>1)
{
sol1*=2;
sol2=(1LL*((1LL*sol2*(rid_put(n,2)-1))%mod)*rid_put(n-1,mod-2))%mod;
}
printf("%lld %d\n",sol1,sol2);
}
return 0;
}