Cod sursa(job #3362464)

Utilizator AndreiFaurFaur Andrei Bogdan AndreiFaur Data 9 august 2026 10:13:34
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>

using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
long long p[11];
long long checkNumber(long long t, long long k) {
    long long x=1, ret=1, n1, i, i1, i2, ans=0;
    for(i=0;i<=k;i++) {
        x*=2;
    }
    for(i=1;i<x;i++) {
        n1=i;
        i1=0;
        i2=0;
        ret=1;
        while(i1<=k) {
            if(n1%2==1) {
                ret*=p[i1];
                i2++;
            }
            i1++;
            n1/=2;
        }
        if(i2%2==1) {
            ans+=t/ret;
        }
        else {
            ans-=t/ret;
        }
    }
    return t-ans;
}
int main()
{
    long long n, t, n1, k=-1;
    fin >> n >> t;
    n1=n;
    for(int d=2;d*d<=n1;d++) {
        if(n1%d==0) {
            k++;
            p[k]=d;
            while(n1%d==0) {
                n1/=d;
            }
        }
    }
    if(n1!=1) {
        k++;
        p[k]=n1;
    }
    long long le=1, ri=1, best, mid;
    for(int i=1;i<=61;i++) {
        ri*=2;
    }
    best=ri;
    while(le<=ri) {
        mid=(le+ri)/2;
        if(checkNumber(mid, k)>=t) {
            best=mid;
            ri=mid-1;
        }
        else {
            le=mid+1;
        }
    }
    fout << best;
    return 0;
}