Pagini recente » Cod sursa (job #1081555) | Cod sursa (job #1964423) | Cod sursa (job #2294160) | Cod sursa (job #44388) | Cod sursa (job #138256)
Cod sursa(job #138256)
#include <iostream.h>
#include <fstream.h>
#include <math.h>
int main()
{int n ,poz , k , x[101], prim [100] , m[101][101] , p , aux ,puterea2;
unsigned long long z;
long i , j , l, y , puterea[100];
ifstream f("factoriale.in");
ofstream g("factoriale.out");
f>>n>>k;
int xmax=0;
for (i=1; i<=n; i++)
f>>x[i]; // citire
if(x[i]>xmax)
xmax=x[i];
p=0;
for (i=2; i<=xmax; i++)
{aux=1;
for(j=2;j<=i/2; j++)
if(i%j==0)
aux=0;
if(aux==1)
{p++;
prim[p]=i;
puterea[p]=0;}
} // generare nr prime pana la xmax
for (i=1; i<=xmax; i++)
for(j=1; j<=p; j++)
{puterea2=0;
while (i!=0 && i%prim[j]==0)
{puterea2++;
i=i/prim[j];}
m[i][j]=puterea2;} // factorizare fiecare nr de la 1 la xmax
for (i=1; i<=n;i++) // ia fiecare x
for (j=1; j<=p; j++) // ia fiecare nr prim
for (k=1;k<=x[i];k++) //ia fiecare termen a lui x[i]!
puterea[j]=puterea[j]+m[k][j]; // aduna puterile
y=0;
for (i=1; i<=p; i++)
if (puterea[i]>y)
y=puterea[i]; // afla cea mai mare putere
if (y%k==0)
{aux=y/k;
y=(aux+1)*k;} // afla y
z=1;
for (i=1; i<=p; i++) // ia fiecare nr prim in parte
if (puterea[i]!=0)
for (j=2; j<=y-puterea[i]; j++)
z=prim[i]*prim[i]; // generare z
cout<<z;
f.close();
g.close();
return 0;
}