যে সংখ্যার প্রাইম ফ্যাক্টর শুধু ২, ৩ বা ৫ হয়, তাকে Ugly Number বলা হয়। কিছু Ugly Number: ১, ২, ৩, ৪, ৫, ৬, ৮, ১০, ১২, ১৫, ইত্যাদি।
আমাদের একটি সংখ্যা N দেওয়া আছে এবং কাজ হল Ugly Number সিকোয়েন্স থেকে Nth Ugly Number খুঁজে বের করা।
উদাহরণ
ইনপুট-১:
N = 5
আউটপুট:
5
ব্যাখ্যা: Ugly Number সিকোয়েন্স [1, 2, 3, 4, 5, 6, 8, 10, 12, 15]-এ ৫ম Ugly Number হল ৫।
ইনপুট-২:
N = 7
আউটপুট:
8
ব্যাখ্যা: Ugly Number সিকোয়েন্স [1, 2, 3, 4, 5, 6, 8, 10, 12, 15]-এ ৭ম Ugly Number হল ৮।
এই সমস্যা সমাধানের পদ্ধতি
এই সমস্যা সমাধানের একটি সহজ পদ্ধতি হল দেওয়া সংখ্যা ২, ৩ বা ৫ দিয়ে বিভাজ্য কিনা চেক করা এবং দেওয়া সংখ্যা পর্যন্ত সিকোয়েন্স ট্র্যাক রাখা। এখন যদি সংখ্যাটি Ugly Number-এর সব শর্ত পূরণ করে, তবে সেটি আউটপুট হিসেবে ফেরত দেয়া হয়।
- Nth Ugly Number খুঁজে বের করার জন্য সংখ্যা N ইনপুট নেওয়া হয়।
- isUgly(int n) বুলিয়ান ফাংশন একটি সংখ্যা 'n' ইনপুট নেয় এবং Ugly Number হলে True, অন্যথায় False ফেরত দেয়।
- findNthUgly(int n) ইন্টিজার ফাংশন 'n' নম্বর ইনপুট নেয় এবং nth Ugly Number আউটপুট হিসেবে ফেরত দেয়।
উদাহরণ কোড
public class UglyN {
public static boolean isUglyNumber(int num) {
boolean x = true;
while (num != 1) {
if (num % 5 == 0) {
num /= 5;
}
else if (num % 3 == 0) {
num /= 3;
}
// চেক করা হচ্ছে সংখ্যা ২ দিয়ে বিভাজ্য কিনা
else if (num % 2 == 0) {
num /= 2;
}
else {
x = false;
break;
}
}
return x;
}
public static int nthUglyNumber(int n) {
int i = 1;
int count = 1;
while (n > count) {
i++;
if (isUglyNumber(i)) {
count++;
}
}
return i;
}
public static void main(String[] args) {
int number = 100;
int no = nthUglyNumber(number);
System.out.println("The Ugly no. at position " + number + " is " + no);
}
}
আউটপুট
The Ugly no. at position 100 is 1536.