Pagini recente » Cod sursa (job #2054384) | Cod sursa (job #1155181) | Cod sursa (job #2349749) | Cod sursa (job #2386550) | Cod sursa (job #988757)
Cod sursa(job #988757)
#include <cstdio>
using namespace std;
int nr=1,a[78498];
char p[62501];
long long pow(long long x)
{
return x*x;
}
long long putlg(int y,int x)
{
if(y==1) return x;
else if(y&1) return (pow(putlg(y>>1,x))*x);
return pow(putlg(y>>1,x));
}
void ciur(int n)
{
int i, j;
for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) {
if ((p[i >> 3] & (1 << (i & 7))) == 0) {
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
p[j >> 3] |= (1 << (j & 7));
}
}
}
for (i = 1; 2 * i + 1 <= n; ++i)
if ((p[i >> 3] & (1 << (i & 7))) == 0)
a[nr++]=2*i+1;
a[0]=2;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
int i,t,s;
long long n,k,p;
ciur(1000000);
scanf("%d",&t);
while(t)
{
--t;
scanf("%lld",&n);
nr=1;s=1;
for(i=0;n>1&&a[i]*a[i]<=n;++i)
{
k=0;
while(n%a[i]==0)
{
++k;
n=n/a[i];
}
if(k)
{
nr*=k+1;
p=putlg(k+1,a[i]);
s=(s*(p-1)/(a[i]-1))%9973;
}
}
if(n>1)
{
nr*=2;
s=(s*(n+1))%9973;
}
printf("%d %d\n",nr,s);
}
return 0;
}