Cod sursa(job #142121)

Utilizator INSiDeAndrei Panturu INSiDe Data 24 februarie 2008 10:52:41
Problema Factoriale Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 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,xmax,putereaz[30];
 long double z;
 long i , j , l, y , puterea[100];
 ifstream f("factoriale.in");
 ofstream g("factoriale.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++)
   {aux=i;
    for(j=1; j<=p; j++)
     {puterea2=0;
      while (aux!=0 && aux%prim[j]==0)
	 {puterea2++;
	  aux=aux/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 (l=1;l<=x[i];l++)           //ia fiecare termen a lui x[i]!
    puterea[j]=puterea[j]+m[l][j];   // aduna puterile
 for (i=1;i<=p;i++)
   if(puterea[i]%k==0)
     putereaz[i]=0;
   else
    {aux=puterea[i]%k;
     putereaz[i]=k-aux;}      // afla puterile factorilor primi din descompunerea lui z
 z=1;
 for (i=1; i<=p; i++)  
  if(putereaz[i]!=0)
    z=z*pow(prim[i],putereaz[i]);    // genereaza z


 g<<z;
 f.close();
 g.close();
 return 0;
 }