Mephistopheles_

D

Apr 25th, 2021
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.72 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define fore(x1,y1) for( long long x1=0;x1<y1;++x1)
  4. #define INF 1e9
  5. #define all(x2) begin(x2),end(x2)
  6. using ull= long long;
  7. int phi (int n) {
  8.     int result = n;
  9.     for (int i=2; i*i<=n; ++i)
  10.         if (n % i == 0) {
  11.             while (n % i == 0)
  12.                 n /= i;
  13.             result -= result / i;
  14.         }
  15.     if (n > 1)
  16.         result -= result / n;
  17.     return result;
  18. }
  19. int gcd (int a, int b) {
  20.     if (b == 0)
  21.         return a;
  22.     else
  23.         return gcd (b, a % b);
  24. }
  25. int g(int a,int n){
  26.     int j=0;
  27.     for(int i=n-1;i>=1;--i){
  28.         if(i==1)
  29.             ++j;
  30.         else if(gcd(i,n)==1)
  31.             ++j;
  32.         if(j==a)
  33.             return i;
  34.     }
  35. }
  36. int main() {
  37.     /* cout.setf(ios::fixed);
  38.      cout.precision(5);*/
  39.     ios::sync_with_stdio(false);
  40.     cin.tie(nullptr);
  41.     int n,k;
  42.     cin>>k>>n;
  43.     int num=0;
  44.     int p=-1,q=-1;
  45.     vector<int>v;
  46.     for(int i=1;i<=sqrt(n) || (n==3 && i<=3) ||i==2;++i) {
  47.         if (n % i != 0)
  48.             continue;
  49.         if (i * i < n && i!=1)
  50.             v.push_back(i);
  51.         int f = phi(n/i);
  52.         num = f;
  53.         int ch=k - num;
  54.         if (ch <= 0) {
  55.             p = g(k, n/i);
  56.             q = n/i;
  57.             break;
  58.         }
  59.         k-=num;
  60.     }
  61.     if(q==-1 && v.size()!=0)
  62.         for(auto i=v.end()-1;;--i){
  63.             int f = phi(*i);
  64.             num = f;
  65.             int ch=k - num;
  66.             if (ch <= 0) {
  67.                 p = g(k, *i);
  68.                 q = *i;
  69.                 break;
  70.             }
  71.             k-=num;
  72.             if(i==v.begin())
  73.                 break;
  74.         }
  75.     if(q==-1)
  76.         cout<<q;
  77.     else
  78.         cout<<p<<' '<<q;
  79. }
  80.  
Advertisement
Add Comment
Please, Sign In to add comment