Pagini recente » Cod sursa (job #1306944) | Cod sursa (job #1741750) | Cod sursa (job #3202271) | Cod sursa (job #2070533) | Cod sursa (job #1195344)
#include <cstdio>
#include <cmath>
using namespace std;
const int NMAX=1000005,MOD=9973;
bool p[NMAX];
int P[NMAX],nr=1;
void atkin()
{
int limit=501,secventa[]={2,4},index,k1,k,i,j,i2;
for(i=1;i<limit;++i)
{
index=0;
k1=(i*i)<<2;
j=1;
if(!(i%3))
{
while(1)
{
k=k1+j*j;
if(k>NMAX) break;
*(p+k)=!*(p+k);
j+=*(secventa+(++index&1));
}
}
else
{
while(1)
{
k=k1+j*j;
if(k>NMAX) break;
*(p+k)=!*(p+k);
j+=2;
}
}
}
limit=580;
for(i=1;i<limit;i+=2)
{
index=1;
k1=3*i*i;
j=2;
while(1)
{
k=k1+j*j;
if(k>NMAX) break;
*(p+k)=!*(p+k);
j+=*(secventa+(++index&1));
}
}
limit=1001;
for(i=1;i<limit;++i)
{
k1=3*i*i;
if(!(i&1)) j=1,index=0;
else j=2,index=1;
while(j<i)
{
k=k1-j*j;
if(k<NMAX) *(p+k)=!*(p+k);
j+=*(secventa+(++index&1));
}
}
*(p+2)=*(p+3)=1;
for(i=5;i<=limit;++i)
{
if(*(p+i))
{
i2=i*i;
for(j=i2;j<=NMAX;j+=i2) *(p+j)=0;
}
}
*(P+1)=2;
for(i=3;i<=NMAX;i+=2)
{
if(*(p+i)) *(P+(++nr))=i;
}
}
void get(long long x)
{
int i,a,nrdiv=1,sum=1,b,c;
for(i=1;(i<=nr) && (1LL*(*(P+i))*(*(P+i))<=x); ++i)
{
if(!(x%*(P+i)))
{
a=1;
do
{
x/=*(P+i);
++a;
}while(!(x%*(P+i)));
nrdiv*=a;
b=(int)(pow(*(P+i),a)-1)%MOD;
c=(int)(pow(*(P+i)-1,MOD-2))%MOD;
sum=(((sum*b)%MOD)*c)%MOD;
}
}
if(x>1)
{
nrdiv*=2;
sum=(1LL*sum*(x+1)%MOD);
}
printf("%d %d\n",nrdiv,sum);
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
long long n,x;
scanf("%lld",&n);
atkin();
while(n--)
{
scanf("%lld",&x);
get(x);
}
fclose(stdin);
fclose(stdout);
return 0;
}