Pagini recente » Cod sursa (job #2357642) | Cod sursa (job #1047148) | Rating Gregor Miedieview (fmoewrke) | Cod sursa (job #661728) | Cod sursa (job #496280)
Cod sursa(job #496280)
#include<cstdio>
const int N=1<<20;
bool ciur[N];
int prim[N>>3];
int p[1<<5],d[1<<5];
int n,nr,t;
void descompunere(int x)
{
p[0]=0;
d[0]=0;
for (int i=1;prim[i]*prim[i]<=x;i++)
{
if (x%prim[i]==0)
{
p[++p[0]]=prim[i];
++d[0];
d[d[0]]=0;
while (x%prim[i]==0)
{
x/=prim[i];
d[d[0]]++;
}
}
}
if (x>1) p[++p[0]]=x;
if (x>1) d[++d[0]]=1;
}
int numar()
{
int s=1;
for (int i=1;i<=d[0];i++)
s*=d[i]+1;
return s;
}
int suma()
{
int pr=1;
for (int i=1;i<=p[0];i++)
{
int s=1;
for ( int j=1;j<=d[i]+1;j++)
s*=p[i];
s-=1;
s/=p[i]-1;
pr*=(s%9973);
pr%=9973;
}
return pr;
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d", &t);
for (int i=2;i*i<N;i++)
{
if (ciur[i]==0)
for (int j=i*i;j<N;j+=i)
ciur[j]=1;
}
for (int i=2;i<N;i++)
if ( ciur[i] == 0 ) prim[++nr]=i;
for (int i=1;i<=t;i++)
{
scanf("%d", &n);
descompunere(n);
printf("%d %d\n", numar() , suma() );
}
return 0;
}