Cod sursa(job #156012)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 12 martie 2008 12:10:03
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#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;
}