Pagini recente » Cod sursa (job #3255882) | Cod sursa (job #907077) | Cod sursa (job #2571688) | Cod sursa (job #399470) | Cod sursa (job #1478655)
#include <stdio.h>
#include <bitset>
#define nmax 1000010
using namespace std;
int n,i,j,prim[100500],nr,k;
long long x,sumd,sol,nrdiv;
bitset <nmax> fr;
int main() {
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d",&n);
for (i=2;i*i<=nmax-10;i++)
if (fr[i]==0) {
for (j=i*i;j<=nmax-10;j+=2*i) fr[j]=1;
}
nr++; prim[nr]=2;
for (i=3;i<=nmax-10;i+=2)
if (fr[i]==0) nr++,prim[nr]=i;
for (i=1;i<=n;i++) {
scanf("%lld",&x); j=1; nrdiv=1; sol=1;
while (x>1 && j<=nr && 1LL*prim[j]*prim[j]<=x) {
k=0; sumd=1;
while (x%prim[j]==0) { k++; x=x/prim[j]; sumd=sumd*1LL*prim[j]; }
if (k>0) {
nrdiv=nrdiv*1LL*(k+1); sumd=sumd*1LL*prim[j]; sol=sol*1LL*(sumd-1)/(prim[j]-1); }
j++;
}
if (x>1) { nrdiv=nrdiv*2; sol=sol*(x*x-1)/(x-1); }
printf("%lld %lld\n",nrdiv,sol);
}
return 0;
}