बदसूरत संख्याएं वे संख्याएं हैं जिनके अभाज्य गुणनखंड 2, 3 या 5 हैं। 1 से 15 तक, 11 बदसूरत संख्याएं हैं: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15। संख्याएं 7, 11, 13 बदसूरत नहीं हैं क्योंकि वे अभाज्य हैं। संख्या 14 बदसूरत नहीं है क्योंकि इसके अभाज्य गुणनखंड में 7 आएगा। तो मान लीजिए हम 10वीं बदसूरत संख्या जांचना चाहते हैं। मान 12 होगा।
आइए विचार प्राप्त करने के लिए निम्न एल्गोरिदम देखें -
एल्गोरिदम
getUglyNumbers(n)
इनपुट - पदों की संख्या।
आउटपुट - nवीं बदसूरत संख्या ढूंढें।
शुरू
uglyNum नामक आकार n का ऐरे परिभाषित करें
i2 := 0, i3 := 0, i5 := 0
next2mul := 2, next3mul := 3, next5Mul := 5
next := 1
ugluNum[0] := 1
for i := 1 to n, do
next := next2Mul, next3Mul और next5Mul का न्यूनतम
uglyNum[i] := next
if next = next2Mul, then
i2 := i2 + 1
next2mul := uglyNum[i2] * 2
if next = next3Mul, then
i3 := i3 + 1
next3mul := uglyNum[i3] * 3
if next = next5Mul, then
i5 := i5 + 1
next5mul := uglyNum[i5] * 5
किया
next लौटाएं
अंत
उदाहरण (C++)
# include<iostream>
using namespace std;
int min(int x, int y, int z){
//तीन संख्याओं में सबसे छोटी ढूंढें
if(x < y){
if(x < z)
return x;
else
return z;
}
else{
if(y < z)
return y;
else
return z;
}
}
int getUglyNum(int n){
int uglyNum[n]; // बदसूरत संख्याओं को स्टोर करने के लिए
int i2 = 0, i3 = 0, i5 = 0;
//अगला गुणक 1*2, 1*3, 1*5 के रूप में ढूंढें
int next2mul = 2;
int next3mul = 3;
int next5mul = 5;
int next = 1; //प्रारंभ में बदसूरत संख्या 1 है
uglyNum[0] = 1;
for (int i=1; i> n;
cout << n << "th Ugly number is: " << getUglyNum(n) << endl;
}
इनपुट
10
आउटपुट
Enter term: 10 10th Ugly number is: 12