Pagini recente » Cod sursa (job #648964) | Cod sursa (job #2897842) | Cod sursa (job #1874837) | Cod sursa (job #2393587) | Cod sursa (job #1885616)
#include <iostream>
#include <fstream>
#include <stdio.h>
FILE * f = fopen("factoriale.in", "r");
FILE * g = fopen("factoriale.out", "w");
int factor[25], v[10001];
int prim[] = {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};
using namespace std;
void desc(int n)
{
int nr;
for (int i = 0; i < 25; ++i)
factor[i] = 0;
for(int i = 0; i < n; ++i) {
fscanf(f, "%d", &nr);
for (int i = 0; i < 25; ++i)
for (int j = prim[i]; j <= nr; j *= prim[i])
factor[i] += nr / j;
}
}
void inmultire(int j, int &cnt)
{
int T = 0;
while(factor[j]) {
for (int i = 1000; i > 1000 - cnt; --i) {
v[i] = v[i] * prim[j] + T;
T = v[i] / 10;
v[i] = v[i]%10;
}
int i = 1000 - cnt;
while (T) {
v[i] = T % 10;
++cnt;
--i;
T /= 10;
}
--factor[j];
}
}
void rezolvare(int k)
{
int cnt = 1;
v[1000] = 1;
for (int i = 0; i < 25; ++i) {
if (factor[i]) {
if (factor[i] % k == 0)
factor[i] = 0;
else
factor[i] = k - factor[i] % k;
}
inmultire(i, cnt);
}
for (int i = 1000 - cnt + 1; i < 1001; ++i)
fprintf(g, "%d", v[i]);
}
int main()
{
int n, k;
fscanf(f, "%d%d", &n, &k);
desc(n);
rezolvare(k);
return 0;
}