Cod sursa(job #138883)
Utilizator | Data | 19 februarie 2008 13:51:22 | |
---|---|---|---|
Problema | Factoriale | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.44 kb |
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 101
int a[N] , b[N] , c[N];
int n , i , j , k , q;
int sol[101];
int main()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d%d",&n,&k);
b[1] = b[0] = 1;
for (i = 2 ; i <= N ; ++i)
{
if (b[i]==0)
{
c[0]++;
c[c[0]] = i;
for (j = 2*i ; j <= N ; j+=i)
b[j] = 1;
}
}
for (i = 1 ; i <= n ; i++)
{
int t;
scanf("%d",&t);
for (int q = 2 ; q <= t ; q++)
{
int aux = q;
for (j = 1 ; j <= c[0] ; j++)
{
while(aux%c[j]==0)
{
a[c[j]]++;
aux/=c[j];
}
}
}
}
sol[0] = 1;
sol[1] = 1;
for (i = 1 ; i <= N ; i++)
{
if (a[i]%k!=0&&a[i]!=0)
{
long long p = a[i];
while(p%k != 0)
p++;
for (j = 1 ; j <= p-a[i] ; j++)
{
for (q = 1; q <= sol[0] ; q++)
sol[q]*=i;
for (q = 1 ; q <= sol[0] ; q++)
{
if (sol[q]>9)
{
if ((q+1) > sol[0])
sol[0] = q + 1;
sol[q+1] += sol[q]/10;
sol[q]%=10;
}
}
}
}
}
for (j = sol[0] ; j >= 1 ; j--)
printf("%d",sol[j]);
return 0;
}