Cod sursa(job #138254)

Utilizator tErMyAndrei Panturu tErMy Data 18 februarie 2008 08:37:25
Problema Factoriale Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#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;
 ifstream f("factorial.in");
 ofstream g("factorial.out");
 f>>n>>k;
 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;
 }