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

সি++ প্রোগ্রাম: মবিয়াস ফাংশন (Mobius Function)


একটি সংখ্যা n দেওয়া আছে; কাজ হল সেই সংখ্যার মবিয়াস ফাংশন মান নির্ণয় করা।

মবিয়াস ফাংশন কী?

মবিয়াস ফাংশন হল একটি সংখ্যা তত্ত্ব ফাংশন যা নিচের মত definiert করা হয়েছে:

μ(n) = 0, যদি n-এ এক বা একাধিক পুনরাবৃত্ত প্রাইম ফ্যাক্টর থাকে

μ(n) = 1, যদি n = 1 হয়

μ(n) = (-1)ᵏ, যদি n হল k টি ভিন্ন প্রাইম সংখ্যার গুণফল

উদাহরণ

ইনপুট: N = 17
আউটপুট: -1
ব্যাখ্যা: প্রাইম ফ্যাক্টর: 17, k = 1, (-1)ᵏ = (-1)¹ = -1

ইনপুট: N = 6
আউটপুট: 1
ব্যাখ্যা: প্রাইম ফ্যাক্টর: 2 এবং 3, k = 2, (-1)² = 1

ইনপুট: N = 25
আউটপুট: 0
ব্যাখ্যা: প্রাইম ফ্যাক্টর ৫ দুবার আছে, তাই উত্তর ০

সমাধানের পদ্ধতি

  • ইনপুট N নিন।
  • ১ থেকে N পর্যন্ত ইটারেট করে N-এর ভাজ্য সংখ্যাগুলো চেক করুন এবং সেগুলো প্রাইম কিনা তা যাচাই করুন।
  • যদি দুটি শর্ত পূরণ হয়, তবে চেক করুন যে সংখ্যার বর্গও N কে ভাগ করে কিনা। যদি হয় তবে ০ রিটার্ন করুন।
  • অন্যথায় প্রাইম ফ্যাক্টরের কাউন্ট বাড়ান। যদি কাউন্ট জোড় হয় তবে ১, বিজোড় হলে -১ রিটার্ন করুন।
  • ফলাফল প্রিন্ট করুন।

অ্যালগরিদম

Start
Step 1→ ফাংশন bool isPrime(int n) এ
    i ডিক্লেয়ার করুন
    If n < 2 হয় Return false
    For i = 2; i * i <= n; i++ লুপ
        If n % i == 0 হয় Return false
    Return true

Step 2→ ফাংশন int mobius(int N) এ
    i এবং p = 0 ডিক্লেয়ার করুন
    If N == 1 হয় Return 1
    For i = 1; i <= N; i++ লুপ
        If N % i == 0 && isPrime(i) হয়
            If N % (i * i) == 0 হয় Return 0
            Else p বাড়ান
    Return (p % 2 != 0) ? -1 : 1

Step 3→ ফাংশন int main() এ
    N = 17 ডিক্লেয়ার ও সেট করুন
    mobius(N) থেকে ফলাফল প্রিন্ট করুন
Stop

সি++ কোড উদাহরণ

#include <iostream>
using namespace std;

bool isPrime(int n) {
    if (n < 2) return false;
    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) return false;
    return true;
}

int mobius(int N) {
    int p = 0;
    if (N == 1) return 1;
    for (int i = 2; i <= N; i++) {
        if (N % i == 0 && isPrime(i)) {
            if (N % (i * i) == 0)
                return 0;
            else
                p++;
        }
    }
    return (p % 2 != 0) ? -1 : 1;
}

int main() {
    int N = 17;
    cout << mobius(N) << endl;
    return 0;
}

আউটপুট

-1

  1. C++-তে মিন এব্সোলিউট ডেভিয়েশন (Mean Absolute Deviation) বের করা

  2. বাইসেকশন মেথড (Bisection Method) C++ প্রোগ্রাম

  3. C++-এ পিরামিডের ভলিউম বের করার প্রোগ্রাম

  4. C++-এ কুইকসর্ট (QuickSort) প্রোগ্রাম