Pagini recente » Cod sursa (job #52708) | Cod sursa (job #824407) | Cod sursa (job #2287820) | Cod sursa (job #1045416) | Cod sursa (job #1707801)
#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;
}