Cod sursa(job #2629379)

Utilizator Gliumarin negai Gliu Data 20 iunie 2020 13:17:16
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.69 kb
#include <fstream>
#include <iostream>
using namespace std;

ifstream in("frac.in");
ofstream out("frac.out");

#define ll long long 


ll A,B,fact[51];

void solve(){
	ll t = 0;
    
    for(int i=2;i*i<=B;i++)
    	if(B % i==0){
    		while(B % i==0)
    			B/=i;
    			fact[++t]=i;
			
		}
	
	if(B != 1)fact[++t]=B;


	ll dr=1ll<<61 ,st=1;
	while(st<=dr){
ll mid=(st+dr)/2,ans;
	ans=mid;
	for(int i = 1;i < (1 << t); ++i){
		ll prod = 1;
		for(int j = 0;j <=t; ++j)
			if(((1 << j) & i)>0)
				prod*=-fact[j + 1];
		ans+= mid/prod;
	}
	if( ans < A) 
	st =mid+1;
	else 
	dr=mid-1;
	
		}
  out <<st;
}


int main(){

in >>B>>A;
solve();
return 0;
}