এই সেকশনে আমরা দেখব কিভাবে একটি সংখ্যার সব বিজোড় প্রাইম ফ্যাক্টরের যোগফল দক্ষতার সাথে বের করতে হয়। ধরি একটি সংখ্যা n = 1092, এর সব ফ্যাক্টর বের করতে হবে। 1092-এর প্রাইম ফ্যাক্টরগুলো হল 2, 2, 3, 7, 13। সব বিজোড় ফ্যাক্টরের যোগফল = 3 + 7 + 13 = 23। এই সমস্যাটি সমাধান করতে নিচের নিয়মগুলো মেনে চলতে হবে:
- যখন সংখ্যা ২ দিয়ে বিভাজ্য হয়, সেটি বাদ দিয়ে সংখ্যাকে ২ দিয়ে বারবার ভাগ করুন।
- এখন সংখ্যাটি বিজোড় হবে। ৩ থেকে সংখ্যার বর্গমূল পর্যন্ত, যদি সংখ্যা বর্তমান মান দিয়ে বিভাজ্য হয়, তবে ফ্যাক্টরটি যোগফলে যোগ করুন এবং সংখ্যাকে বর্তমান সংখ্যা দিয়ে ভাগ করে দিন।
- শেষে অবশিষ্ট সংখ্যাও যোগফলে যোগ করুন যদি সেটি বিজোড় হয়।
এলগরিদম
printPrimeFactors(n):
begin
sum := 0
while n is divisible by 2, do
n := n / 2
done
for i := 3 to sqrt(n), increase i by 2, do
while n is divisible by i, do
sum := sum + i
n := n / i
done
done
if n > 2, then
if n is odd, then
sum := sum + n
end if
end if
end
উদাহরণ কোড
#include <iostream>
#include <cmath>
using namespace std;
int sumOddFactors(int n) {
int i, sum = 0;
while (n % 2 == 0) {
n = n / 2; // ২ দিয়ে ভাগ করে n কমান
}
// যেহেতু সংখ্যা ২ দিয়ে বিভাজ্য নয়, সব ফ্যাক্টর বিজোড়
for (i = 3; i <= sqrt(n); i = i + 2) { // i ২ করে বাড়ছে শুধু বিজোড় সংখ্যা পেতে
while (n % i == 0) {
sum += i;
n = n / i;
}
}
if (n > 2) {
if (n % 2 == 1)
sum += n;
}
return sum;
}
int main() {
int n;
cout << "Enter a number: ";
cin >> n;
cout << "Sum of all odd prime factors: " << sumOddFactors(n);
}
আউটপুট
Enter a number: 1092 Sum of all odd prime factors: 23