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

জাভা প্রোগ্রাম: পারফেক্ট নাম্বার চেক করা

পারফেক্ট নাম্বার কী?

পারফেক্ট নাম্বার হলো একটি ধনাত্মক পূর্ণসংখ্যা যা নিজের বাদে বাকি সব ভাজকের সমষ্টির সমান। অর্থাৎ, একটি সংখ্যা n যদি তার সব প্রপার ডিভাইজারর (proper divisors) সমষ্টি n-র সমান হয়, তবে সেটিকে পারফেক্ট নাম্বার বলা হয়।

উদাহরণ: ৬ হলো প্রথম পারফেক্ট নাম্বার। এর ভাজকগুলো: ১, ২, ৩। সমষ্টি = ১+২+৩ = ৬।

অন্যান্য পারফেক্ট নাম্বার: ২৮, ৪৯৬, ৮১২৮, ৩৩৫৫০৩৩৬

ইনপুট ও আউটপুট উদাহরণ

ইনপুট:

Enter the number : 496

আউটপুট:

The number 496 is a perfect number

অ্যালগরিদম

  1. প্রোগ্রাম শুরু করুন
  2. দুটি লং এবং একটি ইন্টিজার ভেরিয়েবল ঘোষণা করুন: my_input, my_sum, i
  3. ব্যবহারকারী থেকে সংখ্যা ইনপুট নিন
  4. my_sum = 0 এবং i = 1로 ইনিশিয়ালাইজ করুন
  5. হواইল লুপ চালান যতক্ষণ i <= my_input/2
  6. যদি my_input % i == 0 হয়, তবে my_sum += i করুন
  7. i বাড়ান (i++)
  8. লুপ শেষে যদি my_sum == my_input হয়, তবে পারফেক্ট নাম্বার
  9. ফলাফল প্রদর্শন করুন
  10. প্রোগ্রাম শেষ করুন

উদাহরণ ১: ব্যবহারকারী ইনপুট নেওয়া

import java.util.Scanner;

public class PerfectNumber {
    public static void main(String args[]) {
        long my_input, my_sum;
        int i;
        my_sum = 0;
        
        System.out.println("Required packages have been imported");
        Scanner my_scanner = new Scanner(System.in);
        System.out.println("A reader object has been defined");
        System.out.print("Enter the number : ");
        my_input = my_scanner.nextLong();
        
        i = 1;
        while (i <= my_input / 2) {
            if (my_input % i == 0) {
                my_sum = my_sum + i;
            }
            i++;
        }
        
        if (my_sum == my_input)
            System.out.println("The number " + my_input + " is a perfect number");
        else
            System.out.println("The number " + my_input + " is not a perfect number");
    }
}

উদাহরণ ২: পূর্বনির্ধারিত মান ব্যবহার

import java.util.Scanner;

public class PerfectNumber {
    public static void main(String args[]) {
        long my_input, my_sum;
        int i;
        my_sum = 0;
        my_input = 496;
        
        System.out.println("The number is defined as " + my_input);
        
        i = 1;
        while (i <= my_input / 2) {
            if (my_input % i == 0) {
                my_sum = my_sum + i;
            }
            i++;
        }
        
        if (my_sum == my_input)
            System.out.println("The number " + my_input + " is a perfect number");
        else
            System.out.println("The number " + my_input + " is not a perfect number");
    }
}

কোড ব্যাখ্যা

  • লং টাইপ: বড় সংখ্যা হ্যান্ডেল করার জন্য long ব্যবহার করা হয়েছে
  • লুপ সীমা: i <= my_input/2 কারণ কোনো সংখ্যার ভাজক তার অর্ধেকের চেয়ে বড় হতে পারে না (নিজের বাদে)
  • মডুলাস অপারেটর: my_input % i == 0 মানে i হলো my_input-এর ভাজক
  • সময় জটিলতা: O(n) - লিনিয়ার টাইম কমপ্লেক্সিটি

অপ্টিমাইজেশন টিপস

বড় সংখ্যার জন্য লুপকে sqrt(n) পর্যন্ত চালানো যায় এবং জোড়া ভাজক যোগ করে দক্ষতা বেড়ানো যায়:

for (long i = 1; i * i <= my_input; i++) {
    if (my_input % i == 0) {
        my_sum += i;
        if (i != my_input / i && i != 1) {
            my_sum += my_input / i;
        }
    }
}

প্রসangsa জ্ঞান

ইউক্লিড প্রমাণ করেছেন যে, যদি 2^p - 1 একটি মেরসেন প্রাইম (Mersenne prime) হয়, তবে 2^(p-1) * (2^p - 1) একটি পারফেক্ট নাম্বার হবে। এখন পর্যন্ত ৫১টি মেরসেন প্রাইম খুঁজে পাওয়া গেছে, তাই ৫১টি পারফেক্ট নাম্বার জানা আছে।

  1. জাভা প্রোগ্রাম: সমান্তরাল চতুর্ভুজের ক্ষেত্রফল বের করার পদ্ধতি

  2. জাভা প্রোগ্রাম: বৃত্তের পরিধি (Perimeter) বের করার পদ্ধতি

  3. জাভা প্রোগ্রাম: ট্রাপিজিয়াম (Trapezium) এর ক্ষেত্রফল বের করার পদ্ধতি

  4. জাভা প্রোগ্রাম: আয়তের পরিসীমা নির্ণয়