Cod sursa(job #430747)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 31 martie 2010 12:27:53
Problema Frac Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>
long long n,p,nrp,pr[1<<10],prod[1<<10];
void rez()
{
	long long i,j,q,p;
	for(i=0;i<(1<<nrp);++i)
	{
		p=1;
		q=i;
		for(j=0;q;++j,q>>=1)
			if(q%2==1) 
				p*=-pr[j];
		prod[i]=p;
	}
}
long long calc(long long x)
{
	int i;
	long long s=0;
	for(i=0;i<(1<<nrp);++i)
		s+=x/prod[i];
	return s;
}
void cautb()
{
	long long i,pas;
	pas=(long long)1<<61;
	for(i=0;pas;pas>>=1) 
		if(calc(i+pas)<p)
			i+=pas;
	printf("%lld\n",++i);
}
void desc()
{
	long long i;
	for(i=2;i*i<=n;i++)
		if(n%i==0)
		{
			while(n%i==0)
				n/=i;
			pr[nrp++]=i;
		}
	if(n!=1) 
		pr[nrp++]=n;
}
int main()
{
	freopen("frac.in","r",stdin);
	freopen("frac.out","w",stdout);
	scanf("%lld%lld",&n,&p);
	desc();
	rez();
	cautb();
	return 0;
}