Cod sursa(job #66902)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 21 iunie 2007 18:07:01
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream.h>
#include<stdio.h>
#include<math.h>

long long unsigned p, q, b, nr, 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%2==0) return 0;
  for (long d=3; d*d<=x; d+=2)
    if (x%d==0) return 0;
  return 1;
}


void descomp()
{

  for (int 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; break;}

    }

}


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

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