Cod sursa(job #198154)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 8 iulie 2008 22:12:46
Problema Frac Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <stdio.h>
#include <string.h>

#define NMAX 20

long long n,k,nr,v[NMAX],vec[NMAX],i,m,q,stanga,dreapta1,numar,dreapta2;

long long ver(long long x)
{
long long suma=0,produs=1,t=0;

memset(vec,0,sizeof(vec));
while (vec[0]==0)
       {
	for (i=numar;i>=0;--i)
	     if (vec[i]==0)
		 {
		  vec[i]=1;
		  break;
		   }
		  else vec[i]=0;
		for (i=numar;i>=0;--i)
		      if (vec[i]==0)
		       {
		       produs*=vec[i];
		       t=!t;
		       }
		       if (produs==1) break;
		       if (t==0)
			  suma-=x/produs;
			  else
			  suma+=x/produs;

	       }
return x-suma;

}

long long cautare(long long a,long long b)
{
if (a==b) return a;
m=(a+b)/2;
if (ver(m)>k)
   return cautare(a,m);
   else
   return cautare(m+1,b);
}

void citire()
{
freopen("frac.in","rt",stdin);
freopen("frac.out","wt",stdout);

scanf("%lld %lld", &n, &k);
}

void descompunere()
{
for (i=2;i*i<=n;i++)
     if (n%i==0)
	 {
	 v[++nr]=i;
	   while (n%i==0) n/=i;
	   }
	if (n!=0) v[++nr]=n;
}

void solve()
{
citire();
descompunere();
stanga=0;
dreapta1=1000000000;
dreapta2=1000000000;
printf("%lld",cautare(stanga,dreapta1*dreapta2));
}

int main()
{
solve();
return 0;
}