Cod sursa(job #2646595)

Utilizator tryharderulbrebenel mihnea stefan tryharderul Data 1 septembrie 2020 15:22:08
Problema Frac Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <stdio.h>

#define ll long long
using namespace std;

ll n,m,t,i,j,mid,p,nr,st,dr,k;
ll prim[1000];

void div(){
    int d=1,p;

    while(n>1){
        d++;
        p=0;

        while(n%d==0)
            n=n/d,p++;

        if(p)
            prim[++t]=d;


    }
}

int main()
{
    freopen("frac.in","r",stdin);
    freopen("frac.out","w",stdout);

    scanf("%d%d",&n,&m);

    div();

    st=1;dr=1LL*1<<61;

    while(st<=dr){
        mid=(st+dr)>>1;
        nr=mid;
        for(i=1;i<(1<<t);i++){

            p=1;k=0;
            for(j=0;j<t;j++)
                if((1<<j) & i)
                    p=1LL*p*prim[j+1],k++;


            if(k%2==1)
                k=-1;
            else
                k=1;

            nr=nr+1LL*k*mid/p;


        }

        if(nr<m)
            st=mid+1;
        else
            dr=mid-1;

    }

    printf("%lli",st);

    return 0;
}