Pagini recente » Cod sursa (job #2346817) | Cod sursa (job #1943118) | Cod sursa (job #435374) | Cod sursa (job #761898) | Cod sursa (job #1357137)
#include <fstream>
#include <bitset>
using namespace std;
ifstream fin("factoriale.in");
ofstream fout("factoriale.out");
bitset <103> ciur;
int prim[100],N,k,x[100],a[100],f[100],m,K;
int sol[200];
int getfact(int x,int y){
int nr=0;
int a=x;
while(a<=y){
nr=(nr+y/a)%K;
a*=x;
}
return nr;
}
void getprime(){
ciur[0]=ciur[1]=1;
for(int i=2;i<=100;i++){
if(!ciur[i]){
prim[++k]=i;
for(int j=i+i;j<=100;j+=i)
ciur[j]=1;
}
}
}
int main(){
fin>>N>>K;
for(int i=1;i<=N;i++)
fin>>x[i];
getprime();
for(int i=1;i<=k;i++){
for(int j=1;j<=N;j++){
if(prim[i]<=x[j]){
if(a[m]!=prim[i])
a[++m]=prim[i];
f[m]=(f[m]+getfact(prim[i],x[j]))%K;
}
}
}
sol[0]=sol[1]=1;
for(int i=1;i<=m;i++)
if(f[i]!=0){
int b=K-f[i];
while(b--){
int t=0;
for(int j=1;j<=sol[0];j++){
sol[j]=sol[j]*a[i]+t;
t=sol[j]/10;
sol[j]%=10;
}
while(t!=0){
sol[++sol[0]]=t%10;
t/=10;
}
}
}
for(int i=sol[0];i>=1;i--)
fout<<sol[i];
fin.close();fout.close();
return 0;
}