Cod sursa(job #2701242)

Utilizator Danut200333Dumitru Daniel Danut200333 Data 30 ianuarie 2021 11:01:04
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("frac.in");
ofstream fout("frac.out");
long long p,n,v[1000001],k,i;
long long pinex(long long a)
{
    long long rez=a,p,nrc,i,j;
    for(i=1; i<(1LL<<k); i++)
    {
        nrc=0;
        p=1;
        for(j=0; j<k; j++)
            if(i&(1LL<<j))
            {
                nrc++;
                p=p*v[j+1];
            }
        if(nrc%2==1) rez=rez-a/p;
        else rez=rez+a/p;
    }
    return rez;
}
long long caut_bin(long long p)
{
    long long st,dr,mid;
    st=1;
    dr=1000000000000000000000;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if (pinex(mid)<p)st=mid+1;
        else dr=mid-1;
    }
    return st;
}
int main()
{
    fin>>n>>p;
    i=2;
    while(n>1&&i<=sqrt(n))
    {
        if(n%i==0)v[++k]=i;
        while(n%i==0)n=n/i;
        i++;
    }
    if(n>1)v[++k]=n;
    fout<<caut_bin(p);
    return 0;
}