Pagini recente » Cod sursa (job #703139) | Cod sursa (job #2722809) | Cod sursa (job #368825) | Cod sursa (job #1534877) | Cod sursa (job #980942)
Cod sursa(job #980942)
#include <cstdio>
#include <cstring>
using namespace std;
long long i,t,e[1069],x,y[1000069],q[1000069],Sd,Nrd,prim[1000069],p,nr,a,Max,j;
bool ok;
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d", &t);
for (i=1;i<=t;i++) {scanf("%d", &e[i]); if (e[i]>Max) Max=e[i];}
prim[1]=2;
nr=1;
for (x=3; x*x<=Max; x+=2)
{
ok=true;
for (i=1; i<=nr && prim[i]*prim[i]<=x; i++)
if (x%prim[i]==0) ok=false;
if (ok) prim[++nr]=x;
}
for (j=1; j<=t; j++)
{
a=e[j];
for (i=1;i<=p;i++) y[i]=q[i]=0;
for (i=1; prim[i]*prim[i]<a; i++)
{
if (prim[i]*prim[i]!=0)
while (a%prim[i]==0)
{
y[prim[i]]++;
a/=prim[i];
p=prim[i];
if (q[prim[i]]==0) q[prim[i]]=prim[i];
else q[prim[i]]=q[prim[i]]*prim[i];
}
if (a==1) break;
}
y[a]++; if (a>p) p=a;
if (q[a]==0) q[a]=a;
else q[a]=q[a]*a;
Nrd=1; Sd=1;
for (i=2; i<=p; i++) if (y[i]!=0) Nrd=Nrd*(y[i]+1);
for (i=2; i<=p; i++)
if (q[i]!=0) Sd=Sd*(q[i]*i-1)/(i-1);
printf("%lld %lld\n", Nrd, Sd);
}
return 0;
}