Cod sursa(job #2073051)

Utilizator eilerGabriel-Ciprian Stanciu eiler Data 22 noiembrie 2017 17:45:44
Problema Frac Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <fstream>
using namespace std;

int P, D[13], K;
long long rez, N, q;

void gen(long long a, long long b, long long semn){

	if (a==K){
		rez+=q/b*semn;
		return;
	}

	gen(a+1, b*D[a], (-1)*semn);
	gen(a+1, b, semn);
}

void fact(){
	long long d, x;

	x=N;
	for (d=2; d<=x; d++)
		if (x%d==0){
			D[K++]=d;
			while (x%d==0)
				x/=d;
		}
}

long long nrPrimePanaLa(long long k){
	rez=0; q=k;
	gen(0, 1, 1);

	return rez;
}

int main(){
	long long i, j, m, r;

	ifstream fin ("frac.in");
	fin >> N >> P;
	fin.close();

	fact();

	i=0; j=1000000000000000000;
	while (i<=j){
		m=(i+j)/2;
		r=nrPrimePanaLa(m);
		if (r>=P)
			j=m-1;
		else
			i=m+1;
	}

	ofstream fout ("frac.out");
	fout << j+1;
	fout.close();

	return 0;
}