Cod sursa(job #875722)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 10 februarie 2013 18:35:08
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <cstdio>
using namespace std;
int main()
{ int n,h,nr,k,d,exp[1001],i;
  long long x,sd,p[1001];
freopen("ssnd.in","r",stdin); freopen("ssnd.out","w",stdout);
scanf("%d\n",&n);
for(;n>=1;--n)
    {
    scanf("%I64d\n",&x);
    k=0;
    if(x%2==0){ d=0; while(x%2==0){ ++d; x/=2; } ++k; p[k]=2; exp[k]=d; }
    i=3;
    while(x!=1&&i*i<=x)
        {
        if(x%i==0){ d=0; while(x%i==0){ ++d; x/=i; } ++k; p[k]=i; exp[k]=d; }
        i+=2;
        }
    if(x!=1){ ++k; p[k]=x; exp[k]=1; }
    sd=1; nr=1;
    for(i=1;i<=k;++i)
        {
        nr=nr*(exp[i]+1); x=1;
        for(h=1;h<=exp[i]+1;++h)
            x=x*p[i];
        x=(x-1)/(p[i]-1); sd*=x;
        }
    printf("%d %I64d\n",nr,sd);
    }
fclose(stdin);
fclose(stdout);
return 0;
}