Pagini recente » Cod sursa (job #1962185) | Cod sursa (job #1254455) | Cod sursa (job #1929805) | Cod sursa (job #1238427) | Cod sursa (job #3236146)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
long long int numco(long long int a, long long int b){
cout<<a<<" "<<b<<endl;
vector<long long int> v;
if(b%2 == 0){
v.push_back(2);
while(b%2 == 0)b/=2;
}
long long int i = 3;
while(i*i <= b){
if(b%i == 0){
v.push_back(i);
while(b%i == 0)b/=i;
}
i+=2;
}
if(b>1)v.push_back(b);
int n=v.size();
for(auto x:v)cout<<x<<" ";
cout<<endl;
long long int mini=1, maxi=(1<<n)-1, ans=0;
for(int i=mini;i<=maxi;++i){
int pr=1, nr=0;
for(int j=0;j<n;++j){
if (i&(1<<j)){
pr*=v[j];
nr++;
}
}
ans+= (a/pr) * (nr%2?1:-1);
}
cout<<a-ans;
cout<<endl;
cout<<endl;
return a-ans;
}
int main()
{
long long int n,p,mini=1,maxi=2LL<<61;
fin>>n>>p;
long long int res, f, nc;
while (mini<=maxi){
res = (mini+maxi)/2;
nc = numco(res, n);
if(nc>p){
maxi=res-1;
}
else if (nc<p){
mini=res+1;
}
else if(nc==p){
f=res;
maxi=res-1;
}
}
fout<<f<<endl;
return 0;
}