"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > هل هناك طريقة موثوقة لتحديد ما إذا كان العدد الصحيح الكبير هو مربع كامل؟

هل هناك طريقة موثوقة لتحديد ما إذا كان العدد الصحيح الكبير هو مربع كامل؟

تم النشر بتاريخ 2024-11-10
تصفح:804

Is There a Reliable Way to Determine if a Large Integer Is a Perfect Square?

المربعات الكاملة والأعداد الصحيحة: استكشاف عددي

قد يبدو تحديد ما إذا كان رقم معين مؤهلاً كمربع كامل أمرًا بسيطًا في البداية. ومع ذلك، عند النظر في الأعداد الصحيحة الكبيرة وتعقيدات حسابات الفاصلة العائمة، يصبح التحدي أكثر وضوحا.

النهج القائم على الأعداد الصحيحة

في غياب الحاجة الملحة بالنسبة للسرعة، توفر الأساليب المعتمدة على الأعداد الصحيحة وسيلة موثوقة للتحقق من المربعات المثالية. مستوحاة من الخوارزمية البابلية لحساب الجذر التربيعي، تتجذر هذه الأساليب في فكرة أن التحسين التكراري للتقريب الأولي يؤدي في النهاية إلى الدقة.

على وجه التحديد، دالة بايثون التالية، is_square()، توظف هذا الإستراتيجية:

def is_square(apositiveint):
  x = apositiveint // 2
  seen = set([x])
  while x * x != apositiveint:
    x = (x   (apositiveint // x)) // 2
    if x in seen: return False
    seen.add(x)
  return True

يبدأ هذا النهج بتقريب أولي، x، يتم تعريفه على أنه نصف المدخلات الإيجابية. ثم يدخل في عملية تكرارية حيث يتم تعديل x حتى يتقارب مع الجذر التربيعي الحقيقي، apositiveint.

لضمان التقارب، يتم تخزين التقريب الحالي x في مجموعة، ويتم رؤيته للتحقق من أي أحداث سابقة . إذا تم اكتشاف تكرار، فهذا يشير إلى عدم التقارب، وترجع الدالة خطأ. بخلاف ذلك، فإنها تُرجع True عندما تساوي x * x apositiveint.

مثال للتحقق

لتوضيح فعالية هذه الطريقة، خذ بعين الاعتبار المثال التالي:

for i in range(110, 130):
   print(i, is_square(i))

تتكرر هذه الحلقة عبر نطاق من الأعداد الصحيحة من 110 إلى 129، مع التحقق من كل رقم للحصول على حالة مربع مثالي. تؤكد النتيجة دقة الدالة، مع طباعة خطأ للمربعات غير الكاملة وصحيح للمربعات المثالية.

اعتبارات النقطة العائمة

يجب الإشارة إلى ذلك أنه على الرغم من أن حسابات الفاصلة العائمة قد توفر حلاً واضحًا، إلا أنها تعرض خطر أخطاء التقريب التي يمكن أن تؤدي إلى استنتاجات غير صحيحة. نظرًا لأن ضرب الأعداد الصحيحة وتأسيسها هما عمليتان دقيقتان، فإن النهج المبني على الأعداد الصحيحة يضمن الدقة، خاصة بالنسبة للأعداد الكبيرة.

مكتبة Gmpy

إذا كانت السرعة هي الأولوية، فإن gmpy تقدم المكتبة تنفيذًا عالي الكفاءة لوظائف الأعداد الصحيحة. على وجه الخصوص، توفر طريقة is_square() الخاصة بها مكاسب كبيرة في الأداء:

import gmpy

gmpy.is_square(x**7)
gmpy.is_square(x**7   1)

توضح هذه العمليات، التي يتم إجراؤها على أعداد صحيحة كبيرة جدًا، القدرات الاستثنائية لمكتبة gmpy. ومع ذلك، فإن استخدامه قد يثير مخاوف بشأن تعقيد وقت التشغيل واستخدام الذاكرة للتطبيقات المكثفة حسابيًا.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3