Pagini recente » Cod sursa (job #1598759) | Cod sursa (job #1103603) | Cod sursa (job #3183282) | Istoria paginii runda/post_oji | Cod sursa (job #2915629)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "factoriale.in" );
ofstream fout( "factoriale.out" );
const int DIM = 105;
const int MAXD = 10005;
int x[DIM], ciur[DIM];
vector<pair<int, int>> mult;
struct large {
int nd, d[MAXD];
large operator * ( const int &a ) {
large res;
res.init();
int tr = 0, n = this -> nd;
int i;
for ( i = 1; i <= n || tr > 0; ++i ) {
tr += a * (this -> d[i]);
res.d[i] = tr % 10;
tr /= 10;
}
if ( i > n ) {
res.nd = --i;
} else {
res.nd = n;
}
return res;
}
void print() {
for ( int i = (this -> nd); i >= 1; --i ) {
fout << this -> d[i];
}
fout << "\n";
}
void init() {
for ( int i = 0; i < MAXD; ++i ) {
this -> d[i] = 0;
}
this -> nd = 0;
}
};
int main() {
int n, k, mx = 0;
fin >> n >> k;
for ( int i = 1; i <= n; ++i ) {
fin >> x[i];
mx = max(mx, x[i]);
}
for ( int d = 2; d <= mx; ++d ) {
if ( !ciur[d] ) {
int t = 0;
for ( int i = 1; i <= n; ++i ) {
int p = d;
while ( p <= x[i] ) {
t += x[i] / p;
p *= d;
}
}
mult.push_back( {d, (t % k == 0 ? 0 : k - t % k)} );
for ( int i = d + d; i <= mx; i += d ) {
ciur[i] = 1;
}
}
}
large res;
res.init(), res.nd = res.d[1] = 1;
for ( auto e : mult ) {
cout << e.first << " " << e.second << "\n";
while ( e.second-- ) {
res = res * e.first;
}
}
res.print();
fin.close();
fout.close();
return 0;
}