ধরুন আমাদের সর্বোচ্চ এবং সর্বনিম্ন দুটি দীর্ঘ পূর্ণসংখ্যার মান আছে। আমাদের একটি সাধারণ ভগ্নাংশ n/d খুঁজে বের করতে হবে যাতে min <=d <=সর্বোচ্চ। এবং |n/d - pi| সবচেয়ে ছোট। এখানে pi =3.14159265... এবং যদি এই শর্তে একাধিক ভগ্নাংশ থাকে, তাহলে ভগ্নাংশটিকে ক্ষুদ্রতম হর দিয়ে ফেরত দিন।
সুতরাং, যদি ইনপুট সর্বনিম্ন =1 সর্বাধিক =10 এর মত হয়, তাহলে আউটপুট হবে 22/7।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- P :=একটি ভগ্নাংশ (5706674932067741 / 1816491048114374) - 3
- a :=0, b :=1, c :=1, d :=1
- farey :=জোড়ার একটি অ্যারে, এটির প্রাথমিকভাবে দুটি জোড়া আছে (a, b) এবং (c, d)
- নিঃশর্তভাবে নিচের মাধ্যমে লুপ করুন -
- f :=b + d
- যদি f> সর্বোচ্চ - সর্বনিম্ন, তারপর
- লুপ থেকে বেরিয়ে আসুন
- e :=a + c
- ফেরির শেষে জোড়া (e, f) ঢোকান
- যদি P <(e/f) এর মান, তাহলে
- c :=e এবং d :=f
- অন্যথায়,
- a :=e এবং b :=f
- p_min :=(P * সর্বনিম্ন) এর ফ্লোর
- যখন সর্বনিম্ন <=সর্বোচ্চ, করুন
- c :=0, d :=0
- ফেরিতে প্রতিটি জোড়ার (a, b) জন্য, করুন
- যদি সর্বনিম্ন + b> সর্বোচ্চ হয়, তাহলে
- লুপ থেকে বেরিয়ে আসুন
- যদি |(p_min + a)/ (ন্যূনতম + b) - P| <|p_min / সর্বনিম্ন - P|, তারপর
- c :=a, d :=b
- লুপ থেকে বেরিয়ে আসুন
- যদি সর্বনিম্ন + b> সর্বোচ্চ হয়, তাহলে
- যদি d 0 এর সমান হয়, তাহলে
- লুপ থেকে বেরিয়ে আসুন
- p_min :=p_min + c
- o সর্বনিম্ন :=সর্বনিম্ন + d
- ও রিটার্ন ভগ্নাংশ (p_min + 3 * সর্বনিম্ন) / সর্বনিম্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
from fractions import Fraction def solve(minimum, maximum): P = Fraction(5706674932067741, 1816491048114374) - 3 a, b, c, d = 0, 1, 1, 1 farey = [(a,b),(c,d)] while True: f = b + d if f > maximum - minimum: break e = a + c farey.append((e, f)) if P < Fraction(e, f): c, d = e, f else: a, b = e, f p_min = int(P * minimum) while minimum <= maximum: c, d = 0, 0 for a, b in farey: if minimum + b > maximum: break if abs(Fraction(p_min + a, minimum + b).real - P) < abs(Fraction(p_min, minimum).real - P): c, d = a, b break if d == 0: break p_min += c minimum += d return ("{}/{}".format(p_min + 3 * minimum, minimum)) minimum = 1 maximum = 10 print(solve(minimum, maximum))
ইনপুট
4, 27
আউটপুট
22/7