Cod sursa(job #1260462)
| Utilizator | Data | 11 noiembrie 2014 12:33:12 | |
|---|---|---|---|
| Problema | Suma si numarul divizorilor | Scor | 10 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.07 kb |
#include <stdio.h>
using namespace std;
char ciur[1200001];
int main ()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
int n, i, x, prim=2, t, p, j;
while(prim*prim<=1200000)
{
for(i=2; i<=1200000/prim; i++)
ciur[prim*i]=1;
prim++;
while(ciur[prim]==1)
prim++;
}
int nrdiv, suma;
scanf("%d",&n);
for(j=1; j<=n; j++)
{
scanf("%d",&x);
nrdiv=1;
suma=1;
for(i=2; i*i<=x; i++)
if(ciur[i]==0)
{
p=0;
t=1;
while(x%i==0)
{
x/=i;
p++;
t*=i;
}
if(p!=0)
nrdiv=nrdiv*(p+1);
if(t!=1)
suma=suma*(t*i-1)/(i-1);
}
if(x!=1)
{
nrdiv=nrdiv*2;
suma=suma*(x*x-1)/(x-1);
}
printf("%d %d\n",nrdiv,suma);
}
return 0;
}
