সমস্যা বিবরণ
দুটি ফ্লোটিং পয়েন্ট সংখ্যা দেওয়া থাকলে, তাদের GCD বের করুন। ইউক্লিডিয়ান অ্যালগরিদম ফ্লোটিং পয়েন্টে কাজ করে যদি মডুলো অপারেশন সঠিক হয়।
সমাধানের পদ্ধতি
- যদি a < b হয়, সোয়াপ করুন।
- যদি |b| < 0.001 হয় (প্রায় ০), তবে a রিটার্ন করুন।
- অন্যথায়:
gcd(b, a - floor(a/b) * b)রিকার্সিভ কল।
C++ কোড উদাহরণ
#include <bits/stdc++.h>
using namespace std;
double gcd(double a, double b) {
if (a < b) return gcd(b, a);
if (fabs(b) < 0.001) return a;
else return gcd(b, a - floor(a / b) * b);
}
int main() {
double a = 1.20, b = 22.5;
cout << gcd(a, b);
return 0;
}
আউটপুট
0.3
ব্যাখ্যা
1.20 এবং 22.5 → ২২.৫ / ১.২০ = ১৮.৭৫ → ফ্লোর ১৮
রিমেইন্ডার = 22.5 - 18×1.20 = 22.5 - 21.6 = 0.9
gcd(1.20, 0.9) → 1.20/0.9 = 1.33 → ফ্লোর ১
রিমেইন্ডার = 1.20 - 1×0.9 = 0.3
gcd(0.9, 0.3) → 0.9/0.3 = 3 → রিমেইন্ডার 0 → GCD = 0.3
জটিলতা
- সময়: O(log min(a,b)) প্রায়
- স্থান: O(log min(a,b)) রিকার্সন স্ট্যাক