Pagini recente » Cod sursa (job #2585284) | Cod sursa (job #781190) | Cod sursa (job #1869227) | Cod sursa (job #1239711) | Cod sursa (job #300166)
Cod sursa(job #300166)
#include <stdio.h>
int j,w,nr,n,i,p,k,x;
long int exp[109][109];
long long q[1000],r=0;
int main()
{
//exp[nrdescompus,divizorul]
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
scanf("%d %d",&n,&k);
for (i=2;i<=97;i++)
{ if (exp[i][1]==0)
for (p=i;p<=100;p++)
{ for (x=p,w=0;x%i==0;) {x=x/i;w++;}
exp[p][i]=exp[p-1][i]+w;if (w!=0) exp[p][1]=1;
//printf("exp[%ld,%ld]=%ld ",p,i,exp[p][i]);
}
exp[i][1]=0;
//printf("%d %ld ",i,exp[4,i]);
}
for (i=1;i<=n;i++)
{scanf("%d",&x);
for (p=2;p<=x;p++) exp[0][p]+=exp[x][p];}
q[1]=1;nr=1;
//for (i=2;i<=100;i++) printf("%d %ld ",i,exp[0,i]);
//inmultesc numerele de pe linia 0 a exp care %k!=0
for (i=2;i<=97;i++)
{ exp[0][i]=exp[0][i]%k;//printf("%ld de la %ld ",exp[100][2],i);
if (exp[0][i]!=0)
for (p=exp[0][i]+1;p<=k;p++)
{ r=0; for (j=1;j<=nr;j++)
{ q[j]=q[j]*i+r; r=q[j]/10;q[j]=q[j] % 10; }
for (;r;) {nr++;q[nr]=r%10;r/=10;}
}
}
for (i=nr;i>=1;i--) printf("%lld",q[i]);
return 0;}