কম্পিউটার টিউটোরিয়াল

সি++-এ K-তম ক্ষুদ্রতম প্রাইম ভগ্নাংশ (K-th Smallest Prime Fraction)

মনে করুন, একটি সোর্টেড লিস্ট আছে যেখানে ১ এবং কিছু প্রাইম সংখ্যা রয়েছে। এখন লিস্টের প্রতিটি p < q জোড়ার জন্য p/q ভগ্নাংশ বিবেচনা করলে, k-তম ক্ষুদ্রতম ভগ্নাংশটি কোটি তা বের করতে হবে। উত্তরটি একটি অ্যারে হিসেবে রিটার্ন করতে হবে, যেখানে ans[0] = p এবং ans[1] = q।

যেমন, ইনপুট [1,3,5,7] এবং k = 2 হলে, উত্তর হবে 1/5। কারণ ভগ্নাংশগুলো হলো 1/3, 1/5, 1/7, 3/5, 3/7, 5/7, जिनमें দ্বিতীয় ক্ষুদ্রতম হলো 1/5।

সমাধানের ধাপসমূহ

  • Data স্ট্রাকচার সংজ্ঞায়িত করুন যা a, b এবং a/b ধারণ করবে
  • সাইজ ২-এর একটি ret অ্যারে সংজ্ঞায়িত করুন
  • n := A.size()
  • একটি প্রায়োরিটি কিউ pq সংজ্ঞায়িত করুন
  • i := 0 থেকে n-1 পর্যন্ত: pq-তে Data(A[0], A[i], 0) ঢুকান
  • যখন K != 0
    • temp := pq.top(), pq.pop()
    • যদি K == 0 হয়, ret[0] := temp.a, ret[1] := temp.b, ret রিটার্ন করুন
    • যদি temp.idx + 1 < n হয়, idx := temp.idx + 1, pq-তে Data(A[idx], temp.b, idx) ঢুকান
    • K কমান
  • ret রিটার্ন করুন

উদাহরণ

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << ""[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } struct Data{    double val, a, b;    int idx;    Data(double a, double b, int c){       val = a / b;       this->a = a;       this->b = b;       idx = c;    } }; struct Comparator{    bool operator()(Data a, Data b){       return !(a.val < b.val);    } }; class Solution { public:    vector<int> kthSmallestPrimeFraction(vector<int>& A, int K) {       vector <int> ret(2);       int n = A.size();       priority_queue <Data, vector <Data>, Comparator> pq;       for(int i = 0; i < n; i++){          pq.push(Data(double(A[0]), double(A[i]), 0));       }       while(K--){          Data temp = pq.top();          pq.pop();          if(K == 0){             ret[0] = temp.a;             ret[1] = temp.b;             return ret;          }          if(temp.idx + 1 < n){             int idx = temp.idx + 1;             pq.push(Data(double(A[idx]), double(temp.b), idx));          }       }       return ret;    } }; main(){    Solution ob;    vector<int> v = {1,3,5,7};    print_vector(ob.kthSmallestPrimeFraction(v, 2)); }

ইনপুট

{1,3,5,7} 2

আউটপুট

[1, 5, ]
  1. নেক্সট প্যালিনড্রোম প্রাইম খুঁজে বের করা C++-এ

  2. C++-এ nটি রেঞ্জ থেকে k-তম স্মলেস্ট এলিমেন্ট বের করুন

  3. C++-এ বিটওয়াইজ সিব

  4. C++-এ BST-তে K-তম ক্ষুদ্রতম উপাদান খুঁজে বের করা (Order Statistics)