Pagini recente » Cod sursa (job #47426) | Cod sursa (job #2355470) | Cod sursa (job #2466192) | Cod sursa (job #2100867) | Cod sursa (job #3222991)
#include <fstream>
using namespace std;
ifstream cin ("factoriale.in");
ofstream cout ("factoriale.out");
class Numar_Mare {
private:
int cifre[1024] = { };
const int baza = 10000;
public:
Numar_Mare () { cifre[0] = cifre[1] = 1; }
~Numar_Mare () { }
Numar_Mare &operator *= (const int factor) {
int64_t transport = 0;
for (int indice = 1 ; indice <= cifre[0] ; indice++ , transport /= baza)
{ cifre[indice] = (transport += cifre[indice] * factor) % baza; }
for ( ; transport ; transport /= baza)
{ cifre[++cifre[0]] = transport % baza; }
return *this;
}
friend ofstream &operator << (ofstream &iesire , const Numar_Mare &valoare) {
for (int factor = valoare.baza / 10 ; factor ; factor /= 10) {
if (factor <= valoare.cifre[valoare.cifre[0]])
{ iesire.put(valoare.cifre[valoare.cifre[0]] / factor % 10 + '0'); }
}
for (int indice = valoare.cifre[0] - 1 ; indice ; indice--) {
for (int factor = valoare.baza / 10 ; factor ; factor /= 10)
{ iesire.put(valoare.cifre[indice] / factor % 10 + '0'); }
}
return iesire;
}
} factor;
const int prime[] = {2 , 3 , 5 , 7 , 11 , 13 , 17 , 19 , 23 , 29 , 31 , 37 , 41 , 43 , 47 , 53 , 59 , 61 , 67 , 71 , 73 , 79 , 83 , 89 , 97};
int aparitii[25];
int main ()
{
int lungime , exponent;
cin >> lungime >> exponent;
for (int limita ; lungime-- ; )
{
cin >> limita;
for (int indice = 0 ; indice < 25 ; indice++) {
for (int putere = prime[indice] ; putere <= limita ; putere *= prime[indice])
{ aparitii[indice] += limita / putere; }
}
}
for (int indice = 0 ; indice < 25 ; indice++) {
if (aparitii[indice] %= exponent) {
for (int ramas = exponent - aparitii[indice] ; ramas-- ; )
{ factor *= prime[indice]; }
}
}
cout << factor;
cout.close(); cin.close();
return 0;
}