Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ . में बदसूरत संख्या III

मान लीजिए हमें n-th बदसूरत संख्या खोजने के लिए एक प्रोग्राम लिखना है। बदसूरत संख्याएँ धनात्मक पूर्णांक होती हैं जो a या b या c से विभाज्य होती हैं। उदाहरण के लिए, यदि n =3 और a =2, b =3 और c =5, तो आउटपुट 4 होगा, क्योंकि बदसूरत संख्याएँ हैं [2,3,4,5,6,8,9,10] , तीसरा वाला 4 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • ओके () नामक एक विधि बनाएं, इसमें एक्स, ए, बी, सी लगेगा, यह नीचे की तरह कार्य करेगा -

  • वापसी (x/a) + (x/b) + (x/c) – (x/lcm(a,b)) – (x/lcm(b, c)) – (x/lcm(b,c) ) - (x/lcm(a,c)) + (x/lcm(a, lcm(b,c)))

  • मुख्य विधि से, निम्नलिखित करें -

  • निम्न :=1, उच्च :=2 * (10^9)

  • जबकि कम <उच्च -

    • मध्य:=निम्न + (उच्च-निम्न)/2

    • एक्स:=ठीक है (मध्य, ए, बी, सी)

    • यदि x>=n, तो उच्च :=मध्य, अन्यथा निम्न :=मध्य + 1

  • उच्च वापसी

उदाहरण (C++)

एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
public:
   lli gcd(lli a, lli b){
      return b == 0? a: gcd(b, a % b);
   }
   lli lcm(lli a, lli b){
      return a * b / gcd(a, b);
   }
   lli ok(lli x, lli a, lli b, lli c){
      return (x / a) + (x / b) + (x / c) - (x / lcm(a, b)) - (x / lcm(b, c)) - (x / lcm(a, c)) + (x / lcm(a, lcm(b, c)));
   }
   int nthUglyNumber(int n, int a, int b, int c) {
      int low = 1;
      int high = 2 * (int) 1e9;
      while(low < high){
         int mid = low + (high - low) / 2;
         int x = ok(mid, a, b, c);
         if(x>= n){
            high = mid;
         }
         else low = mid + 1;
      }
      return high;
   }
};
main(){
   Solution ob;
   cout << (ob.nthUglyNumber(3,2,3,5));
}

इनपुट

3
2
3
5

आउटपुट

4

  1. C++ में मितव्ययी संख्या

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया जाता है। हमारा कार्य यह जाँचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या - एक संख्या जिसके अंकों की संख्या दी गई संख्या के अभाज्य गुणनखंड में अंकों की संख्या से अधिक है। उदाहरण − 625, संख्या 625 का अभाज्

  1. सी++ पेंटाटोप नंबर

    पास्कल के त्रिभुज में एक पंचकोण संख्या को पाँचवीं संख्या के रूप में वर्णित किया गया है। अब, जैसा कि आप जानते हैं, यह पांचवीं संख्या है, तो इसका मतलब है कि हमारे पास पास्कल के त्रिकोण में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है। पास्कल त्रिभुज की

  1. C++ में एडम नंबर

    इस खंड में हम देखेंगे कि एक प्रोग्राम कैसे लिखा जाता है जो यह जांच सकता है कि दी गई संख्या एडम नंबर है या नहीं। कोड में गोता लगाने से पहले आइए देखें कि एडम नंबर क्या है? आदम संख्या एक संख्या है मान लीजिए n, तो यदि n का वर्ग और n के विपरीत का वर्ग एक-दूसरे के विपरीत हों, तो वह संख्या आदम संख्या होती