Cod sursa(job #767956)

Utilizator bratualexBratu Alexandru bratualex Data 15 iulie 2012 16:24:49
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <math.h>

using namespace std;
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
int ciur ( int );
char a[1000000];
int v[1000000];
int putere (int,int);
int main()
{
    int n,k=0,suma,nr,i,x,c,j;
    fin>>n;
    i=ciur (1000000);
    for(i=0;i<n;i++)
    {
        suma=1;
        nr=1;
        fin>>x;
        j=0;
        while(x!=1)
        {
            c=0;
            while (!(x%v[j]))
            {
                c++;
                x=x/v[j];
            }
            if (c)
            {
                suma=suma*((putere (v[j],c+1)-1)/(v[j]-1));
                nr=nr*(c+1);
            }
            j++;
        }
        fout<<nr<<" "<<suma<<"\n";
    }
    //fout<<v[n+1]*v[n+1];


    return 0;
}

int ciur ( int n )
{
    int i,j,nr=1,k=0;
    v[k++]=2;
    for (i=1;(i<<1)+1<=n;i++)
    {
        if (a[i]=='\0')
        {
            v[k++]=2*i+1;
            nr++;
            for(j=i+i+i+1;(j<<1)+1<=n;j+=(i<<1)+1)
                a[j]='1';
        }

    }
    return nr;
}

int putere (int n , int k)
{
    long long aux;
    if (k==1)
        return n;
    else
    {
        aux=(putere (n,k/2));
        if (k%2)
            return ((((aux)*(aux)))*(n));
        else
            return ((aux)*(aux));
    }
}