Pagini recente » Cod sursa (job #2074178) | Cod sursa (job #1636558) | Cod sursa (job #2277330) | Cod sursa (job #2972092) | Cod sursa (job #1526538)
#include <bits/stdc++.h>
#define NMAX 1000005
#define MOD 9973
using namespace std;
long long N,sumadiv,nrdiv,prime,v[500009],x;
bool ok[1000005];
void ciur()
{
int i,j;
for (i=2; i<=NMAX ; ++i)ok[i]=true;
for (i=2; i<=NMAX ; ++i)
{
if (ok[i])
{
v[++prime]=i;
j=i*2;
for ( ; j<=NMAX ; j+=i)
ok[j]=false;
}
}
}
long long powa(int nur,int putere)
{
long long nr=1LL;
for ( ; putere ; --putere)
nr*=1LL*nur;
return nr;
}
void descompunere(int nr)
{
long long i=1,exp,p;
bool ok=false;
nrdiv=1LL;
sumadiv=1LL;
int xx=sqrt(1.0*nr);
while (nr!=1&&i<=prime&&v[i]<=xx)
{
exp=0;
p=v[i];
while(nr%p==0&&nr>1)
{
nr/=p;
++exp;
}
++i;
if (exp==0)continue ;
ok=true;
nrdiv*=1LL*(exp+1);
int y = 1LL*(powa(p,exp+1)-1)/(p-1);
sumadiv=(sumadiv*y);
}
if (ok==true&&v[i]*v[i]>nr&&nr>1)nrdiv*=2,sumadiv*=((powa(nr,2)-1)/(nr-1));
sumadiv%=MOD;
if (ok=false)nrdiv=2,sumadiv=(nr+1)%MOD;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%lld\n",&N);
ciur();
for ( ; N ; --N)
{
scanf("%lld\n",&x);
if (x<=NMAX&&ok[x]==true)
{
printf("2 %lld\n",(1+x)%MOD);
continue;
}
descompunere(x);
printf("%lld %lld\n",nrdiv,sumadiv);
}
return 0;
}