Cod sursa(job #3332847)

Utilizator novak1snovac luca novak1s Data 9 ianuarie 2026 13:08:32
Problema Frac Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>
#include <iomanip>
using namespace std;
#define int long long
const int nmax=1e6;
int fr[nmax],fr2[nmax];
int phi(int n) {
    int result = n;
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            while (n % i == 0)
                n /= i;
            result -= result / i;
        }
    }
    if (n > 1)
        result -= result / n;
    return result;
}
int phi2(int n, int mid) {
    int result = n;
    for (int i = 2; i * i <= mid; i++) {
        if (n % i == 0) {
            while (n % i == 0)
                n /= i;
            result -= result / i;
        }
    }
    if (n > 1)
        result -= result / n;
    return result;
}
signed main() {
    //ifstream cin("pairs.in");
    //ofstream cout("pairs.out")
    int n,p;
    cin >> n >> p;
    int cnt=phi(n);
    int rest=p%cnt;
    int cat=p/cnt;
    int st=0;
    int dr=n;
    int mid=0;
    int rez=0;
    while(st<=dr){
        mid=(dr+st)/2;
        if(phi2(n,mid)==rest){
            dr=mid-1;
        }
        else if(phi2(n,mid)>rest){
            dr=mid-1;
        }
        else if(phi2(n,mid)<rest){
            st=mid+1;
        }
    }
    cout << mid;
    return 0;
}