Cod sursa(job #1092967)

Utilizator alexiaambrusAlexia Ambrus alexiaambrus Data 27 ianuarie 2014 17:07:40
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <cstdio>
#include <cmath>
using namespace std;
FILE * f;
ofstream g("ssnd.out");
long long j, i;
int n, nrp, t, s, nd, x, p, p1, a[100001], v[32001];
int main()
{f= fopen("ssnd.in", "r");
fscanf(f, "%d", &n);
a[1]= 1;
for(i= 2; i<=100000; i++)
if(a[i]==0)
{
    nrp++;
    v[nrp]= i;
    for(j= i*i; j<=100000; j= j+i)
    a[j]= 1;
}
for(t= 1; t<=n; t++)
{
    s= 1;
    nd= 1;
    fscanf(f, "%d", &x);
    for(i= 1; i<=nrp; i++)
    if(v[i]*v[i]>x)
    break;
    else
    {
        p= 0;
        while(x%v[i]==0)
        {
            p++;
            x= x/v[i];
        }
        if(p>0)
        {
            nd= nd*(p+1);
            p1= pow(v[i], p+1)-1;
            s= s*p1/(v[i]-1);
        }
    }
    if(x>1)
    {
        nd= nd*2;
        s= s*(x+1);
    }
    g<<nd<<' '<<s<<'\n';
}
return 0;
}