নম সুপার কুৎসিত সংখ্যাটি খুঁজে পেতে আমাদের একটি ফাংশন তৈরি করতে হবে৷ সুপার কুৎসিত সংখ্যাগুলি হল ধনাত্মক সংখ্যা যার সমস্ত মৌলিক গুণনীয়কগুলি k আকারের প্রদত্ত মৌলিক তালিকার প্রাইমগুলিতে রয়েছে। তাই যদি n হয় 12 এবং প্রাইম হয় [2, 7, 13, 19], তাহলে আউটপুট হবে 32, এর কারণ [1, 2, 4, 7, 8, 13, 14, 16, 19, 26, 28, 32] হল 12টি অতি কুৎসিত সংখ্যার ক্রম৷
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
num, prime এবং idx
সহ একটি ডেটা স্ট্রাকচার ট্রিপলেট তৈরি করুন -
যদি n 1 হয়, তাহলে 1 ফেরত দিন, n + 1 আকারের একটি অ্যারে তৈরি করুন এবং এটি 1 দিয়ে পূরণ করুন
-
একটি অগ্রাধিকার সারি সংজ্ঞায়িত করুন pq
-
আমি 0 থেকে প্রাইম-
এর মাপ পরিসরে-
ট্রিপলেট তৈরি করুন t(primes[i], primes[i], 2)
-
-
আমি 2 থেকে n
পরিসরে-
curr :=pq এর শীর্ষ উপাদান, তারপর pq
থেকে মুছে দিন -
val :=curr সংখ্যা
-
v[i] :=ভাল
-
curr এর সংখ্যা :=curr এর প্রধান * v[curr এর সূচক]
-
curr এর সূচক 1 দ্বারা বৃদ্ধি করুন
-
pq
-এ curr ঢোকান -
while val =pq শীর্ষের সংখ্যা,
-
curr :=pq এর শীর্ষ এবং pq থেকে মুছে দিন
-
curr এর সংখ্যা :=curr এর প্রধান * v[curr এর সূচক]
-
curr এর সূচক 1 দ্বারা বৃদ্ধি করুন
-
pq
-এ curr ঢোকান
-
-
-
প্রত্যাবর্তন v[n]
উদাহরণ (C++)
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h> using namespace std; struct Data{ int num, prime, idx; Data(int a, int b, int c){ num = a; prime = b; idx = c; } }; struct Comparator{ bool operator()(Data a, Data b){ return !(a.num < b.num); } }; class Solution { public: int nthSuperUglyNumber(int n, vector<int>& primes) { if(n == 1)return 1; vector <int> v(n + 1, 1); priority_queue < Data, vector < Data >, Comparator > pq; for(int i = 0; i < primes.size(); i++){ pq.push(Data(primes[i], primes[i], 2)); } int x; for(int i = 2; i <= n; i++){ Data curr = pq.top(); pq.pop(); int val = curr.num; v[i] = val; curr.num = curr.prime * v[curr.idx]; curr.idx++; pq.push(curr); while(val == pq.top().num){ curr = pq.top(); pq.pop(); curr.num = curr.prime * v[curr.idx]; curr.idx++; pq.push(curr); } } return v[n]; } }; main(){ Solution ob; vector<int> v = {2,7,13,19}; cout << (ob.nthSuperUglyNumber(12, v)); }
ইনপুট
12 [2,7,13,19]
আউটপুট
32