Pagini recente » Borderou de evaluare (job #3361120) | Borderou de evaluare (job #3361100) | Borderou de evaluare (job #3361035) | Borderou de evaluare (job #3361106) | Cod sursa (job #3361069)
#include <fstream>
using namespace std;
ifstream fin("factoriale.in");
ofstream fout("factoriale.out");
int N,K,x;
int ciur[101],prime[30],k;
int apprime[30];
int produs[150];
void generare(){
produs[0]=produs[1]=1;
for(int i=2;i<=100;i++)
if(ciur[i]==0){
prime[++k]=i;
for(int j=i+i;j<=100;j+=i)
ciur[j]=1;
}
}
void Legendre(int x){
for(int i=1;i<=k;i++){
int p=prime[i],sol=0;
while(p<=x){
sol+=x/p;
p*=prime[i];
}
apprime[i]+=sol;
}
}
void inmutire(int j,int produs[]){
int t=0;
for(int i=1;i<=produs[0];i++){
produs[i]=produs[i]*j+t;
t=produs[i]/10;
produs[i]%=10;
}
while(t!=0){
produs[++produs[0]]=t%10;
t/=10;
}
}
int main()
{
generare();
fin>>N>>K;
for(int i=1;i<=N;i++){
fin>>x;
Legendre(x);
}
for(int i=1;i<=k;i++){
if(apprime[i]%K>0){
int rest=(K-apprime[i]%K)%K;
for(int j=1;j<=rest;j++)
inmutire(prime[i],produs);
}
}
for(int i=produs[0];i>=1;i--)
fout<<produs[i];
return 0;
}
// 2 3 5 7 11 13 17 19 23 27 29 31 37 41 43 47 53 57 59 61 67 83 87 89 91 97