Pagini recente » Cod sursa (job #2917497) | Cod sursa (job #2517701) | Cod sursa (job #2523300) | Cod sursa (job #1868443) | Cod sursa (job #156012)
Cod sursa(job #156012)
#include<fstream.h>
#include<math.h>
int prim (int n)
{
int i;
for (i=2;i<=sqrt(n);i++)
if (n%i==0) return 0;
return 1;
}
int calcul (int a, int p)
{
int i=1;
int s=0;
while (a>=pow(p,i))
s+=a/((int)pow(p,i++));
return s;
}
void inmultire (int v[10000], int &n, int a, int p)
{
int i,j;
while (p--)
{
v[n+1]=0;
for (i=1;i<=n;i++)
v[i]=v[i]*a;
for (i=1;i<=n;i++)
{
v[i+1]+=v[i]/10;
v[i]=v[i]%10;
}
if (v[n+1]>0) while (v[n+1])
{
n++;
v[n+1]=v[n]/10;
v[n]=v[n]%10;
}
}
}
int main()
{
ifstream f("factoriale.in");
int n,k,v[101],i,j,p=0;
int max=-1;
f>>n>>k;
char ch[3200000];
long b[101];int a[101];
for (i=1;i<=n;i++)
{
f>>v[i];
if (v[i]>max) max=v[i];
}
f.close();
for (i=2;i<=max;i++)
if (prim(i)) { a[++p]=i;b[p]=0;}
for (i=1;i<=n;i++)
for (j=1;j<=p && a[j]<=v[i];j++)
b[j]+=calcul(v[i],a[j]);
int q[10000];q[1]=1;int e=1;
for (i=1;i<=p;i++) {
b[i]=k-b[i]%k;
if (b[i]!=k) inmultire(q,e,a[i],b[i]);
}
ofstream g ("factoriale.out");
for (i=e;i>=1;i--) g<<q[i];
g.close();
return 0;
}