Cod sursa(job #2629368)

Utilizator Gliumarin negai Gliu Data 20 iunie 2020 13:00:00
Problema Frac Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <string.h>
#include <fstream>
#include <iostream>
using namespace std;

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

#define ll long long 
#define MAX_P 1000000

ll A,B,M,fact[30];

void solve(){
	ll t = 0 ,d = 2;
	while(B > 1){
	
		if(B % d == 0){
			fact[++t] = d;	
			while (B % d == 0)
			 B /= d;
		}
		
		if(d > sqrt(B) && B > 1){
			fact[++t] = B;
			B = 1;
		}
	   if(d % 2) d++;
	   else d+=2;
	 
	}
	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){
				prod = 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;
}