Cod sursa(job #670510)
Utilizator | Data | 29 ianuarie 2012 13:04:19 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.55 kb |
#include <cstdio>
int v[1311310];
int main(){
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
int t,n,i,nr;
long long S;
scanf("%d",&t);
while(t--){
long long put[500000];
for(i=1;i<=500000;i++){
put[i]=1;
v[i]=0;
}
S=1;
nr=1;
i=2;
scanf("%d",&n);
//descompunem in factori primi
while(n!=1){
if(n%i==0){
++v[i];
n/=i;
put[i]*=i;
}
else
i++;
}
int d=i;
for(i=2;i<=d;i++)
if(v[i]){
nr=nr*(v[i]+1);
S=S*( ( put[i]*i -1 )/(i-1)) ;
}
printf("%d %lld\n",nr,S);
}
}