ফ্যাক্টর (Factor) কী?
ফ্যাক্টর হলো এমন সংখ্যাগুলো যা অন্য একটি সংখ্যাকে সম্পূর্ণরূপে ভাগ করে দেয় (বাকি ০ থাকে)। যদি a × b = c হয়, তবে a এবং b হলো c-এর ফ্যাক্টর।
উদাহরণ: ১২-এর ফ্যাক্টর: ১, ২, ৩, ৪, ৬, ১২
গুণনफल: ১×১২=১২, ২×৬=১২, ৩×৪=১২
গুণাবলী
- ১ সব সংখ্যার ফ্যাক্টর
- প্রতিটি সংখ্যা নিজের ফ্যাক্টর
- ফ্যাক্টর সবসময় সংখ্যাটির চেয়ে ছোট বা সমান
- ফ্যাক্টরগুলো জোড়ায় আসে (a, b) যেখানে a × b = n
ইনপুট ও আউটপুট উদাহরণ
ইনপুট:
Input : 45
আউটপুট:
The factors of 45 are: 1 3 5 9 15 45
অ্যালগরিদম
- প্রোগ্রাম শুরু করুন
- দুটি ইন্টিজার ভেরিয়েবল ঘোষণা করুন: my_input, i
- ব্যবহারকারী থেকে সংখ্যা ইনপুট নিন
- ফর লুপ চালান i = 1 থেকে my_input পর্যন্ত
- যদি my_input % i == 0 হয়, তবে i ফ্যাক্টর → প্রিন্ট করুন
- ফলাফল প্রদর্শন করুন
- প্রোগ্রাম শেষ করুন
উদাহরণ ১: ব্যবহারকারী ইনপুট নেওয়া
import java.util.Scanner;
public class Factors {
public static void main(String[] args) {
int my_input, i;
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.nextInt();
System.out.print("The factors of " + my_input + " are: ");
for (i = 1; i <= my_input; ++i) {
if (my_input % i == 0) {
System.out.print(i + " ");
}
}
}
}
উদাহরণ ২: পূর্বনির্ধারিত মান ব্যবহার
import java.util.Scanner;
public class Factors {
public static void main(String[] args) {
int my_input = 45, i;
System.out.println("The number is defined as " + my_input);
System.out.print("The factors of " + my_input + " are: ");
for (i = 1; i <= my_input; ++i) {
if (my_input % i == 0) {
System.out.print(i + " ");
}
}
}
}
অপ্টিমাইজড ভার্শন: O(√n) কমপ্লেক্সিটি
ফ্যাক্টরগুলো জোড়ায় আসে। sqrt(n) পর্যন্ত চেক করলেই যথেষ্ট।
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class FactorsOptimized {
public static void main(String[] args) {
int n = 45;
List factors = new ArrayList<>();
for (int i = 1; i * i <= n; i++) {
if (n % i == 0) {
factors.add(i);
if (i != n / i) { // পারফেক্ট স্কোয়ার না হলে
factors.add(n / i);
}
}
}
Collections.sort(factors);
System.out.println("The factors of " + n + " are: " + factors);
}
}
উন্নত আউটপুট ফরম্যাটিং
System.out.print("The factors of " + n + " are: ");
for (int i = 0; i < factors.size(); i++) {
System.out.print(factors.get(i));
if (i < factors.size() - 1) System.out.print(", ");
}
System.out.println();
প্রাইম ফ্যাক্টরাইজেশন (Prime Factorization)
সंख্যাকে প্রাইম ফ্যাক্টরের গুণফল হিসেবে প্রকাশ করা:
public static void primeFactors(int n) {
System.out.print("Prime factors of " + n + ": ");
for (int i = 2; i * i <= n; i++) {
while (n % i == 0) {
System.out.print(i + " ");
n /= i;
}
}
if (n > 1) System.out.print(n);
System.out.println();
}
// 45 → 3 3 5
তুলনা
| পদ্ধতি | সময় জটিলতা | স্পেস জটিলতা | আউটপুট অর্ডার |
|---|---|---|---|
| সিম্পল লুপ (১ থেকে n) | O(n) | O(1) | সর্টেড |
| অপ্টিমাইজড (√n) | O(√n) | O(√n) | অসর্টেড (সর্ট দরকার) |
| প্রাইম ফ্যাক্টরাইজেশন | O(√n) | O(1) | প্রাইম ফ্যাক্টরのみ |
বাস্তব প্রয়োগ
- ক্রিপ্টোগ্রাফি (RSA - বড় সংখ্যা ফ্যাক্টর করা কঠিন)
- GCD/LCM ক্যালকুলেশন
- ফ্যাক্টর হ্যান্ডলিং, ডিভাইজার সমস্যা
- নম্বর থিওরি, ম্যাথেম্যাটিক্যাল প্রোগ্রামিং
এজ কেস হ্যান্ডলিং
public static void printFactors(int n) {
if (n <= 0) {
System.out.println("Please enter a positive integer");
return;
}
if (n == 1) {
System.out.println("The factors of 1 are: 1");
return;
}
// ... বাকি লজিক
}