Cod sursa(job #1707801)

Utilizator Fanika123Tanasa Stefan Fanika123 Data 25 mai 2016 21:46:47
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.61 kb
#include <fstream>
using namespace std;
int n,a[1005],b[1005],c[1005];
///a pentru numere
///b pentru factori
///c pentru exponentii la care se gasesc factorii
ifstream cin("ssnd.in");
ofstream cout("ssnd.out");
long long PutereLogaritmic(long long baza, int exponent)
{
    long long p=1 ;
    while (exponent>0)
    {
        if (exponent%2==1)
        {   p*=baza;
            exponent-- ;
        }
        baza=baza*baza ;
        exponent=exponent/2;
    }
    return p ;
}
int card,suma,d,p,j,nr;
int main()
{int i;
    cin>>n;
    for (i=1;i<=n;i++) cin>>a[i];
    for (i=1;i<=n;i++)
    {///pentru fiecare termen vom face descompunerea in factori primi
     ///factorul il vom aduna la suma
     ///puterea vom aduna la card
     suma=card=1;
     j=0; nr=0; d=2;
     ///facem descompunerea in factori primi
     if (a[i]==0) {cout<<"1 0"<<"\n";}
     else {while(a[i]!=1)
           {p=0;
            while(a[i]%d==0) {a[i]/=d; p++;}
            ///adaugam la vectorii b si c factorii, respectiv exponentii
            b[++j]=d; nr++; c[j]=p;
            if (d*d<=a[i]) d++;
            else d=a[i];
           }
           ///adaugam in final la suma si card valorile din vectorii b respectiv c
           ///pentru exponenti
           for (j=1;j<=nr;j++)
             card*=(c[j]+1);
           ///pentru suma
           for (j=1;j<=nr;j++)
           {int valoare;
               valoare=PutereLogaritmic(b[j],c[j]+1);
               suma*=(valoare-1)/(b[j]-1);
           }
           cout<<card<<" "<<suma<<"\n";}
          }
    cin.close();
    cout.close();
    return 0;
}