Cod sursa(job #67076)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 22 iunie 2007 15:00:22
Problema GFact Scor 85
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream.h>
#include<stdio.h>
#include<math.h>

long long unsigned p;
long long unsigned q, b, nr;
long long unsigned a, v[10], ex;

void citire()
{
  ifstream in("gfact.in");
  in>>p>>q;
  in.close();
}

int prim(long x)
{
  if (x==2) return 1;
  if (x==1) return 0;
  if (x%2==0) return 0;
  for (long long unsigned d=3; d*d<=x; d+=2)
    if (x%d==0) return 0;
  return 1;
}


void descomp()
{
  int ok=1;
  for (long long unsigned d=2; d<=p; d++)
    {
      if (p%d==0)
      {
	v[++nr]=d;
	ex=0;
	while (p%d==0) { p/=d; ex++;}
	if (prim(p)) { v[++nr]=p; ex=1; ok=0;}
      }
      if (ok==0) break;     

    }

}


void aflu()
{
  long long unsigned i, contor=0;
  if (p!=1) {freopen("gfact.out","w",stdout);
  printf("%llu",p*q*ex);}
  else{
  i=v[nr];
  contor=0;
  while (contor<q*ex)
   {
     long long j;
     j=i;
     if (j%v[nr]==0)
       while (j%v[nr]==0)
	 {
	   contor++;
	   j/=v[nr];
	 }
     i+=v[nr];
   }
  freopen("gfact.out","w",stdout);
  printf("%llu",i-v[nr]);
  }
}

int main()
{
  citire();
  descomp();
  aflu();
  return 0;
}