Cod sursa(job #455062)
| Utilizator | Data | 12 mai 2010 23:43:57 | |
|---|---|---|---|
| Problema | Suma si numarul divizorilor | Scor | 0 |
| Compilator | c | Status | done |
| Runda | Arhiva educationala | Marime | 0.93 kb |
#include<stdio.h>
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
long i,j,nr=0,v[10000];
char prim[1000000];
for(i=2;i<=1000000;i++)
prim[i]=1;
for(i=2;i<=1000000;i++)
if (prim[i])
{
nr++;
v[nr]=i;
for(j=i+i;j<=1000000;j+=i)
prim[j]=0;
}
int t;
long n,nd,s,c,p;
scanf("%i",&t);
for(;t;--t)
{
scanf("%li",&n);
nd=1; s=1;
for(i=1;v[i]*v[i]<=n;i++)
{
c=0;p=1;
while(n%v[i]==0)
{
c++;
n=n/v[i];
p=p*v[i];
}
if (c!=0)
{
nd=nd*(c+1);
p=p*v[i];
s=s*(p-1)/(v[i]-1);
}
}
printf("%li %li\n",nd,s%9973);
}
return 0;
}
