Cod sursa(job #1707797)

Utilizator Fanika123Tanasa Stefan Fanika123 Data 25 mai 2016 21:39:22
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.56 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 main()
{int i;
    cin>>n;
    for (i=1;i<=n;i++) cin>>a[i];
 int card,suma;
    card=suma=1;
    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;
     int d,p,j,nr;
     j=0; nr=0; d=2;
     ///facem descompunerea in factori primi
     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++)
     {int produs=1;
       produs=(c[j]+1);
       card*=produs;
     }
     ///pentru suma
     for (j=1;j<=nr;j++)
     {int s=1,valoare;
         valoare=PutereLogaritmic(b[j],c[j]+1);
         s=(valoare-1)/(b[j]-1);
         suma*=s;
     }
     cout<<card<<" "<<suma<<"\n";
    }
    cin.close();
    cout.close();
    return 0;
}