الجذر التربيعي الصحيح
في نظرية الأعداد ، الجذر التربيعي الصحيح (isqrt) لعدد صحيح غير سالب n هو العدد الصحيح غير السالب m الذي يمثل أكبر عدد صحيح أقل من أو يساوي الجذر التربيعي لـ n .
على سبيل المثال،
ملاحظة تمهيدية
يتركولتكن أعدادًا صحيحة غير سالبة.
الخوارزميات التي تحسب ( التمثيل العشري لـ)يستمر التشغيل إلى ما لا نهاية على كل مدخلوهو ليس مربعًا كاملًا . [ ملاحظة 1 ]
الخوارزميات التي تحسبلا تعمل إلى الأبد . ومع ذلك فهي قادرة على الحوسبةبدقة تصل إلى أي مستوى مطلوب.
اختر أيًا منهاواحسب.
على سبيل المثال (الإعداد)):
قارن النتائج مع
يبدو أن ضرب المدخلات بـيُعطي دقة تصل إلى k خانة عشرية. [ ملاحظة 2 ]
لحساب التمثيل العشري (الكامل) لـيمكن للمرء أن ينفذعدد لا نهائي من المرات، متزايدبمعاملفي كل تمريرة.
افترض أنه في البرنامج التالي () الإجراءتم تعريفها بالفعل، ومن أجل هذا النقاش ، يمكن لجميع المتغيرات أن تحمل أعدادًا صحيحة ذات حجم غير محدود.
ثمسيتم طباعة التمثيل العشري الكامل لـ[ ملاحظة 3 ]
استيراد الرياضيات # افترض حساب الجذر التربيعي كما هو موضح هنادالة sqrtForever ( y : int ): """ اطبع جذر(y) دون توقف """ result = math . isqrt ( y ) print ( str ( result ) + "." , end = "" ) # اطبع النتيجة متبوعة بفاصلة عشريةبينما صحيح : # كرر إلى ما لا نهاية ... ص * = ١٠٠ # مثال نظري: يتم تجاهل تجاوز القيمة النتيجة = math.isqrt ( ص ) اطبع ( str ( النتيجة % ١٠ ), نهاية = "" ) # اطبع الرقم الأخير من النتيجة
والخلاصة هي أن الخوارزميات التي تحسب isqrt()مكافئة حسابيًا للخوارزميات التي تحسبsqrt() .
اشتقاق آخر منمنيتم تقديمها في القسم " الكسر المستمر لـ √c بناءً على isqrt" أدناه.
الخوارزميات الأساسية
الجذر التربيعي الصحيح لعدد صحيح غير سالبيمكن تعريفها على النحو التالي:
على سبيل المثال،لأن.
خوارزمية تستخدم البحث الخطي
البرامج التالية المكتوبة بلغة بايثون هي تطبيقات مباشرة.
دالة isqrt ( y : int ) -> int : """ الجذر التربيعي الصحيح (بحث خطي، تصاعدي) """ # تقدير أولي أقل من القيمة الحقيقية، L <= isqrt(y) L = 0 بينما ( L + 1 ) * ( L + 1 ) <= y : L += 1إرجاع L
دالة isqrt ( y : int ) -> int : """ الجذر التربيعي الصحيح (بحث خطي، تنازلي) """ # تقدير أولي زائد، isqrt(y) <= R R = y بينما ( R * R > y ): R -= 1إرجاع R
البحث الخطي باستخدام الجمع
في البرنامج أعلاه (بحث خطي، تصاعدي) يمكن استبدال الضرب بالجمع، باستخدام التكافؤ
دالة isqrt ( y : int ) -> int : """ الجذر التربيعي الصحيح (بحث خطي، تصاعدي) باستخدام الجمع """ L = 0 a = 1 d = 3بينما a ≤ y : a = a + d، d = d + 2 ، L = L + 1إرجاع L
خوارزمية تستخدم البحث الثنائي
يقوم البحث الخطي بفحص كل قيمة بالتسلسل حتى يصل إلى أصغر قيمةأين.
يتم تحقيق تسريع العملية باستخدام البحث الثنائي بدلاً من ذلك.
دالة isqrt ( y : int ) -> int : """ الجذر التربيعي الصحيح (بحث ثنائي) """ L = 0 # الحد الأدنى للجذر التربيعي R = y + 1 # الحد الأعلى للجذر التربيعيبينما ( L ≠ R - 1 ): M = ( L + R ) // 2 # نقطة المنتصف للاختبار إذا ( M * M <= y ): L = M وإلا : R = Mإرجاع L
أمثلة عددية
- ،.
- باستخدام البحث الثنائي، يتم حسابيتقارب إلىفيخطوات التكرار عبرتسلسل
- حسابيتقارب إلىفيخطوات عبرتسلسل
- البحث الخطي (تصاعديًا، بدءًا من) يحتاج1414 خطوة.
خوارزمية تستخدم طريقة نيوتن
إحدى طرق الحسابوتتمثل الطريقة في استخدام طريقة هيرون ، وهي حالة خاصة من طريقة نيوتن ، لإيجاد حل للمعادلة، مما يعطي الصيغة التكرارية
التسلسليتقارب تربيعيًا إلىمثل[ 1 ] [ ملاحظة 4 ]
باستخدام القسمة الصحيحة فقط
للحوسبةيمكن استخدام ناتج القسمة الإقليدية في كلتا عمليتي القسمة. تكمن ميزة ذلك في استخدام أعداد صحيحة فقط لكل قيمة وسيطة، مما يجعل استخدام تمثيلات الفاصلة العائمة غير ضروري.
يتركوالتخمين الأوليعرّف متتالية الأعداد الصحيحة:
إثبات التقارب
1. الإيجابية: جميع الحدود أعداد صحيحة موجبة:للجميع.
2. الرتابة:
- لو، ثم؛
- لذا.
- وبالتالي يتناقص التسلسل.
- لو، ثم؛
- لذا.
- وبالتالي، فإن التسلسل إما يزداد أو يبقى كما هو.
3. التقييد: المتتالية محدودة من الأسفل بـ 1 ومن الأعلى بـلذلك فهي محدودة.
4. الاستقرار / التذبذب: تسلسل الأعداد الصحيحة الرتيب المحدود إما أن يستقر أو يتذبذب بين عددين صحيحين متتاليين:
- أو.
5. حالة "النقطة الثابتة" للأعداد الصحيحة: عند الاستقرار أو التذبذب:
- .
- وهذا يضمن أن يكون التسلسل إما عندأو التذبذب بين أقرب عددين صحيحين حول.
6. الخلاصة: يستقر التسلسل في النهاية عندأو يتأرجح بينو.
ملاحظة:
- هي نقطة ثابتة صارمة ما لممربع كامل.
- لوإذا كان مربعًا كاملًا، فإن المتتالية تتأرجح بينو.
مثال على التنفيذ
دالة isqrt ( n : int , x0 : int = 1 ) -> int : """ دالة isqrt باستخدام تكرار نيوتن-هيرون مع تخمين أولي محدد. تستخدم كشف التذبذب ثنائي الدورة. الشروط المسبقة: n >= 0 # جذر 0 = 0 x0 > 0، القيمة الافتراضية هي 1 # التخمين الأولي الناتج: isqrt(n) """ assert n >= 0 and x0 > 0 , "إدخال غير صالح"# isqrt(0) = 0; isqrt(1) = 1 إذا كان n < 2 : يُرجع nprev2 = -1 # x_ {i-2} prev1 = x0 # x_{i-1}بينما صحيح : x1 = ( prev1 + n // prev1 ) // 2# الحالة 1: تقارب (قيمة ثابتة) إذا كانت x1 == prev1 : أرجع x1# الحالة 2: التذبذب (دورتان) إذا كان x1 == prev2 و x1 != prev1 : # نحن نتبادل بين prev1 و prev2 # نختار الأصغر (الجذر الصحيح الصحيح) إرجاع min ( prev1 , x1 )# تقدم للأمام prev2 ، prev1 = prev1 ، x1
أمثلة عددية
يتقارب النداء isqrt(2000000)إلىفي 14 مرورًا عبر while:
- .
يتم الحصول على تكرار واحد عن طريق ضبطه x0علىمع الاستدعاء isqrt(2000000, 1000000). على الرغم من أن طريقة هيرون تتقارب بشكل تربيعي قريب من الحل، إلا أنه يتم اكتساب دقة أقل من بت واحد لكل تكرار في البداية. هذا يعني أن اختيار التقدير الأولي أمر بالغ الأهمية لأداء الخوارزمية. [ ملاحظة 5 ] عندما تتوفر عملية حساب سريعة للجزء الصحيح من اللوغاريتم الثنائي أو لطول البتn.bit_length() (كما هو الحال في بايثون على سبيل المثال )، فمن الأفضل البدء منأيهما أصغر قوة للعدد اثنين أكبر منفي مثال الجذر التربيعي الصحيح للعدد 2000000 ،،والتسلسل الناتج هو في هذه الحالة، نحتاج فقط إلى أربع خطوات تكرارية. وهذا يتوافق مع الاستدعاء isqrt(2000000, 2048).
خوارزمية رقمًا برقم
الخوارزمية التقليدية التي تستخدم القلم والورقة لحساب الجذر التربيعيتعتمد هذه الطريقة على العمل من خانات الأرقام الأعلى إلى الأدنى، ومع كل رقم جديد، يتم اختيار أكبر رقم يُنتج مربعًا.إذا توقفنا بعد خانة الآحاد، فإن النتيجة المحسوبة ستكون الجذر التربيعي الصحيح.
باستخدام عمليات البت
عند العمل بالنظام الثنائي ، يُبسط اختيار الرقم إلى الاختيار بين 0 (الرقم الأصغر) و1 (الرقم الأكبر)، ويمكن التعبير عن عمليات تغيير الأرقام باستخدام عمليات الإزاحة الثنائية. وباعتبار *الضرب، و الإزاحة إلى اليسار، و الإزاحة المنطقية إلى اليمين، فإن الخوارزمية التكرارية لإيجاد الجذر التربيعي الصحيح لأي عدد طبيعي هي:<<>>
دالة isqrt_recursive ( n : int ) -> int : تحقق مما إذا كان n أكبر من أو يساوي 0 ، "يجب أن يكون n عددًا صحيحًا غير سالب" إذا كان n < 2 : أرجع n# استدعاء تكراري: small_cand = isqrt_recursive ( n >> 2 ) << 1 # نفس 2 * isqrt(n // 4) large_cand = small_cand + 1 if large_cand * large_cand > n : return small_cand else : return large_cand
البرنامج غير التكراري المكافئ: [ 2 ] [ ملاحظة 6 ]
دالة isqrt_iterative ( x : int ) -> int : """ جاي، مارتن (1985). "الجذر التربيعي السريع للأعداد الصحيحة باستخدام خوارزمية المعداد للسيد وو" """ تحقق من أن x >= 0 ، "يجب أن يكون x عددًا صحيحًا غير سالب"العملية = x ؛ النتيجة = 0# ملاحظة: i << 1 يساوي 2 * i، و i << 2 يساوي 4 * i، i >> 1 يساوي i // 2، و i >> 2 يساوي i // 4...# يبدأ العدد "واحد" من أعلى قوة للعدد أربعة <= x، أي أن "واحد" = 1، بينما "واحد" <= op : "واحد " <<= 2، أي أن "واحد" >>= 2بينما واحد لا يساوي صفرًا : dltasqr = res + واحد إذا كان op >= dltasqr : op -= dltasqr res += واحد << 1 res >>= 1 واحد >>= 2إرجاع النتيجة
انظر طرق حساب الجذور التربيعية § النظام العددي الثنائي (الأساس 2) للحصول على مثال. [ 2 ]
خوارزمية كاراتسوبا للجذر التربيعي
تُطبّق خوارزمية كاراتسوبا للجذر التربيعي نفس مبدأ فرق تسد المُستخدم في خوارزمية كاراتسوبا للضرب لحساب الجذور التربيعية للأعداد الصحيحة. وقد قام بول زيمرمان (1999) بتحليل هذه الطريقة تحليلاً رسميًا. [ 3 ] تقوم هذه الخوارزمية بتقسيم العدد المُدخل بشكل متكرر إلى نصفين، كبير وصغير، ثم تحسب الجذر التربيعي للنصف الكبير، وبعد ذلك تحدد الجذر التربيعي للنصف الصغير جبريًا.
الخوارزمية
يقدم بول زيمرمان (1999) الخوارزمية التالية. [ 3 ]
لأن استدعاءً تكراريًا واحدًا فقط يتم إجراؤه لكل مستوى، فإن التعقيد الكلي يظلفي عدد البتات. كل مستوى يُجري عمليات حسابية خطية فقط على أرقام نصف الحجم.
مقارنة مع عملية الضرب في كاراتسوبا
| ملكية | ضرب كاراتسوبا | الجذر التربيعي على طريقة كاراتسوبا |
|---|---|---|
| عدد الاستدعاءات المتكررة لكل مستوى | 3 | 1 |
| تكرار | ||
| التعقيد التقاربي | ||
| عملية رئيسية | ثلاث عمليات ضرب جزئية وإعادة تركيب | جذر تربيعي واحد متكرر وتصحيح جبري |
الاستخدام والتاريخ
يُستخدم الجذر التربيعي على نمط كاراتسوبا بشكل أساسي في العمليات الحسابية ذات الدقة العالية على الأعداد الصحيحة الكبيرة جدًا، حيث يتكامل بكفاءة مع قسمة بيرنيكل-زيغلر وضرب كاراتسوبا . وقد حلله بول زيمرمان (1999) رسميًا لأول مرة. [ 3 ] وتشمل الأعمال العملية السابقة مارتن غاي (1985)، [ 2 ] وتظهر نسخ تكرارية منه في دونالد كنوث (1998). [ 4 ] وتُنفذ مكتبات GMP و MPIR الحديثة تقنيات تكرارية مماثلة.
التنفيذ بلغة بايثون
يُنفذ برنامج بايثون أدناه خوارزمية زيمرمان. بفرض عدد صحيح، SqrtRemويحسب في آن واحد جذره التربيعي الصحيحوالباقي المقابلالخيار isqrt()متروك للتقدير . [ ملاحظة 5 ]
دالة SqrtRem ( n : int , word_bits : int = 32 ) -> tuple [ int , int ]: """ تعتمد هذه الدالة على خوارزمية الجذر التربيعي الصحيح من نوع Karatsuba لزيمرمان [Zimmermann, 1999]. تقوم هذه الدالة بتقسيم المدخل n بشكل متكرر إلى أجزاء بحجم `word_bits`، ثم تجمع النتائج الجزئية لحساب الجذر التربيعي الصحيح. الوسائط: n (عدد صحيح): عدد صحيح غير سالب لحساب الجذر التربيعي له. word_bits (عدد صحيح، اختياري): عدد البتات لكل "جزء" أو كتلة مستخدمة عند تقسيم n بشكل متكرر. القيمة الافتراضية هي 32. يمثل كل جزء جزءًا ثابت الحجم من n للخوارزمية. القيمة المرجعة: tuple[int, int]: s = الجذر التربيعي الصحيح لـ n، r = باقي (n - s*s). ملاحظات: يتحكم حجم الجزء في دقة الاستدعاء الذاتي. يؤدي استخدام قيمة أكبر لـ word_bits إلى تقليل عمق الاستدعاء الذاتي ولكنه يزيد من حجم المسائل الفرعية؛ بينما يؤدي استخدام قيمة أصغر لـ word_bits إلى زيادة عمق الاستدعاء الذاتي ولكنه يعمل على أجزاء أصغر. المرجع: زيمرمان، ب. (1999). "جذر كاراتسوبا التربيعي"، تقرير بحثي رقم 3805، معهد أبحاث علوم الحاسوب والتحكم الآلي (Inria). مؤرشف على الرابط: https://inria.hal.science/inria-00072854v1/file/RR-3805.pdf إذا كان n < 0 : ارفع خطأ ValueError ( "يجب أن يكون n غير سالب" ) إذا كان n == 0 : أرجع 0 ، 0 # حالة بسيطة# تحديد عدد الأجزاء بحجم الكلمة (يحاكي تقسيم "الأجزاء" في زيمرمان) limblen = ( n . bit_length () + word_bits - 1 ) // word_bits# الحالة الأساسية: طرف واحد — احسب مباشرةً إذا كان طول الطرف <= 1 : s = isqrt ( n ) # أي دالة isqrt، على سبيل المثال، math.isqrt أو دالة مخصصة r = n - s * s أرجع s ، r# --- الخطوة 1: تقسيم n إلى جزأين: علوي وسفلي --- half_limbs = limblen // 2 shift = half_limbs * word_bits hi = n >> shift # النصف العلوي، يُقابل a3*b + a2 lo = n & (( 1 << shift ) - 1 ) # النصف السفلي، يُقابل a1*b + a0# --- الخطوة 2: استدعاء متكرر للجزء الأعلى --- s_high , r_high = SqrtRem ( hi , word_bits ) # الجذر التربيعي التقريبي للنصف الأعلى# --- الخطوة 3: إعادة التجميع لتقريب الجذر التربيعي الكامل --- الربع = إزاحة // 2 البسط = ( r_high << الربع ) | ( lo >> الربع ) # محاكاة خطوة زيمرمان DivRem المقام = s_high << 1 # حد 2*q = البسط // المقام إذا كان المقام صحيحًا، وإلا 0 # قسمة عددية صحيحة s_candidate = ( s_high << quarter ) + q # إعادة دمج الأعلى والأدنى# --- الخطوة 4: التحقق والتصحيح --- # تأكد من أن الباقي غير سالب وأن s*s <= n < (s+1)*(s+1) s = s_candidate r = n - s * sبينما r < 0 : # تصحيح المبالغة s -= 1 r = n - s * s بينما ( s + 1 ) * ( s + 1 ) <= n : # تصحيح التقليل s += 1 r = n - s * sأعد s و r
مثال على الاستخدام
for n in [( 2 ** 32 ) + 5 , 1234567890 , ( 1 << 1512 ) - 1 ]: s , r = SqrtRem ( n ) print ( f "SqrtRem( { n } ) = { s } , remainder = { r } " );
| حساب |
|---|
الجذر التربيعي لباقي قسمة 4294967301 يساوي 65536، والباقي يساوي 5 |
الجذر التربيعي لباقي قسمة 1234567890 = 3513641828، والباقي = 5763386306 |
SqrtRem(143665816004337822710282600285310394341474369045835074863414468709543787931907367746179403311452034095731304 0662341120712675104724642609551530845754081472546729572617 6390798239533794390664586422901425022705720782623275195705 3220218983971305018634078800548055251973907806245884614087189937340865371691338441989956445051526543084039211962387469415699218979531585795574920384684004258007709014706216763392717018544247025174258411677231986785008489302218244095) = 379032737378102767370356320425415662904513187772631008578870126471203845870697482014374611530431269030880793627229265919475483409207718357286202948008100864063587640630090308972232735749901964068667724412528434753635948938919935، الباقي = 758065474756205534740712640850831325809026375545262017157740252942407691741394964028749223060862538061761587254458531838950966818415436714572405896016201728127175281260180617944465471499803928137335448825056869507271897877839870 |
في لغات البرمجة
تخصص بعض لغات البرمجة عملية صريحة لحساب الجذر التربيعي للأعداد الصحيحة بالإضافة إلى الحالة العامة، أو يمكن توسيعها بواسطة المكتبات لهذا الغرض.
| لغة البرمجة | مثال على الاستخدام | تم طرح الإصدار |
|---|---|---|
| كنيسة صغيرة | BigInteger.sqrt(result, n);[ 5 ]BigInteger.sqrtRem(result, remainder, n); | مجهول |
| لغة الشفرة الشائعة | (isqrt n)[ 6 ] | مجهول |
| كريستال | Math.isqrt(n)[ 7 ] | 1.2 |
| جافا | n.sqrt()[ 8 ] (BigIntegerفقط) | 9 |
| جوليا | isqrt(n)[ 9 ] | 0.3 |
| خشب القيقب | isqrt(n)[ 10 ] | مجهول |
| طبيب عام/طبيب عام | sqrtint(n)[ 11 ] | 1.35أ [ 12 ] (كما هو isqrt) أو قبل |
| PHP | sqrt($num)[ 13 ] | 4 |
| بايثون | math.isqrt(n)[ 14 ] | 3.8 |
| مضرب | (integer-sqrt n)[ 15 ](integer-sqrt/remainder n) | مجهول |
| روبي | Integer.sqrt(n)[ 16 ] | 2.5.0 |
| الصدأ | n.isqrt()[ 17 ] n.checked_isqrt()[ 18 ] | 1.84.0 |
| SageMath | isqrt(n)[ 19 ] | مجهول |
| مخطط | (exact-integer-sqrt n)[ 20 ] | R 6 RS |
| تي سي إل | isqrt($n)[ 21 ] | 8.5 |
| زيج | std.math.sqrt(n)[ 22 ] | مجهول |
الكسر المستمر لـ √c بناءً على isqrt
حساب الكسر المستمر البسيط لـيمكن تنفيذ ذلك باستخدام عمليات الأعداد الصحيحة فقط، معيُستخدم هذا الحد كبداية. تقوم الخوارزمية [ 23 ] بتوليد توسيع الكسر المستمر في شكله المتعارف عليه .
يترك ليكن الجذر التربيعي الصحيح لـ.
لوإذا كان مربعًا كاملًا، فإن الكسر المستمر ينتهي فورًا:
وإلا، فإن الكسر المستمر يكون دوريًا:
- ،
حيث يشير الخط العلوي إلى الجزء المتكرر.
يمكن الحصول على الكسر المستمر من خلال العلاقة التكرارية التالية، والتي تستخدم فقط العمليات الحسابية للأعداد الصحيحة:
- ل،
بما أن عدد الثلاثيات الممكنة محدودوفي النهاية يتكرر الأمر، ومن تلك النقطة فصاعدًا يصبح الكسر المستمر دوريًا.
التنفيذ بلغة بايثون
عند الإدخال، وهو عدد صحيح غير سالب، يحسب البرنامج التالي الكسر المستمر البسيط لـالجذر التربيعي الصحيحيتم حسابها مرة واحدة. [ ملاحظة 5 ] يتم استخدام العمليات الحسابية للأعداد الصحيحة فقط. يُخرج البرنامج، حيث يمثل العنصر الثاني الجزء الدوري.
دالة حساب الكسر المستمر للجذر التربيعي للعدد c باستخدام العمليات الحسابية الصحيحة. تُرجع الدالة مصفوفة من الأعداد الصحيحة تمثل الجزء الدوري . في حالة المربعات الكاملة ، تكون الدورة فارغة . مثال: ` a0 = isqrt ( c )` ، حيث a0 * a0 == c` ، و ` a0 = ( a0 , ( )) ` .m ، d ، a = 0 ، 1 ، a0 الفترة = [] المشاهدة = مجموعة ()بينما صحيح : m_next = d * a - m d_next = ( c - m_next * m_next ) // d a_next = ( a0 + m_next ) // d_nextإذا كانت ( m_next ، d_next ، a_next ) موجودة في seen : توقفتمت المشاهدة . أضف (( m_next , d_next , a_next )) الفترة . أضف ( a_next ) m , d , a = m_next , d_next , a_nextreturn ( a0 , tuple ( period ))
مثال على الاستخدام
for c in list ( range ( 0 , 18 )) + [ 114 ] + [ 4097280036 ]: cf = continued_fraction_sqrt ( c ) print ( f "sqrt( { c } ): { cf } " )
الناتج
المدخل (ج) الناتج (cf) الكسر المستمر 0 [0] 1 [1] 2 [1; (2,)] 3 [1; (1, 2)] 4 [2] 5 [2؛ (4,)] 6 [2; (2, 4)] 7 [2; (1, 1, 1, 4)] 8 [2; (1, 4)] 9 [3] 10 [3؛ (6,)] 11 [3; (3, 6)] 12 [3; (2, 6)] 13 [3; (1, 1, 1, 1, 6)] 14 [3; (1, 2, 1, 6)] 15 [3؛ (1، 6)] 16 [4] 17 [4؛ (8,)] 114 [10; (1, 2, 10, 2, 1, 20)] [ ملاحظة 7 ] 4097280036
انظر أيضاً
ملحوظات
- ↑ الجذور التربيعية للأعداد المربعة الكاملة (مثل 0، 1، 4، 9، 16) هي أعداد صحيحة. في جميع الحالات الأخرى، تكون الجذور التربيعية للأعداد الصحيحة الموجبة أعدادًا غير نسبية.
- ↑ ليس من المستغرب أن يكون الضرب المتكرر في 100 سمة مميزة في كتاب جارفيس (2006).
- ↑ يتم تمثيل الجزء الكسري من الجذور التربيعية للأعداد المربعة الكاملة على النحو التالي: 000... .
- ↑ انظر طريقة هيرون .
- يمكن كتابة طريقة نيوتن على النحو التالي ( مع تحديد التخمين الأولي إلى): الحسابات
دالة isqrt ( s : int ) -> int : """إيجاد الجذر التربيعي باستخدام تكرار نيوتن/هيرون.""" L , R = 1 , s بينما L < R : R = L + (( R - L ) // 2 ) L = s // R إرجاع R
- ،.
- حسابيتكون منخطوات:
- يتضح أن تحسن أداء طريقة نيوتن مقارنةً بالبحث الثنائي يعود إلى حقيقة أنيتم التعامل معها في وقت واحد من اليسار واليمين ، بينما يقوم البحث الثنائي بتعديل جانب واحد فقط في كل تكرار.
- ↑ تم شرح الخوارزمية في Square_root_algorithms#Binary numeral system (base 2)
- ↑ انظر المثال في مقالة الكسر المستمر الدوري .
- ↑ توسيع الكسر المستمر لـيبلغ طول هذه المتسلسلة 13032 حدًا. ورغم أن بايثون لا تستطيع عرض المتسلسلة كاملةً على الشاشة نظرًا لطولها، إلا أن كتابة الناتج إلى ملف تتم بنجاح.
مراجع
- ↑ جونسون، إس جي (4 فبراير 2015). "الجذور التربيعية باستخدام طريقة نيوتن" (ملف PDF) . دورة معهد ماساتشوستس للتكنولوجيا 18.335: مقدمة في الطرق العددية . تم الاطلاع عليه بتاريخ 12 أكتوبر 2025 .
- 1 2 3 غاي، مارتن (1985). "الجذر التربيعي السريع للأعداد الصحيحة باستخدام خوارزمية المعداد للسيد وو" . جامعة كنت في كانتربري (UKC). مؤرشف من الأصل في 6 مارس 2012. تم الاطلاع عليه في 5 أكتوبر 2025 .
- 1 2 3 زيمرمان، بول (1999). "جذر كاراتسوبا التربيعي" (ملف PDF) . تقرير بحثي رقم 3805. معهد أبحاث علوم الحاسوب والتحكم الآلي (Inria ) (نُشر في 24 مايو 2006). مؤرشف (ملف PDF) من الأصل في 11 مايو 2023.
- ↑ كنوت، دونالد إي. (1998). فن برمجة الحاسوب، المجلد 2: الخوارزميات شبه العددية ( الطبعة الثالثة). أديسون-ويسلي. ISBN 9780201896848.
- ↑ "BigInteger - وثائق Chapel 2.1" . وثائق Chapel - وثائق Chapel 2.1 .
- ↑ "CLHS: Function SQRT, ISQRT" . Common Lisp HyperSpec (TM ) .
- ↑ "الرياضيات - كريستال 1.13.2" . وثائق واجهة برمجة تطبيقات لغة برمجة كريستال .
- ↑ "BigInteger (Java SE 21 & JDK 21)" . وثائق JDK 21 .
- ↑ "الرياضيات - لغة جوليا" . وثائق جوليا - لغة جوليا .
- ↑ "مساعدة iroot- Maple" . مساعدة - Maplesoft .
- ↑ "كتالوج وظائف GP/PARI: الوظائف الحسابية" . مقر تطوير PARI/GP .
- ↑ "فهرس /archive/science/math/multiplePrecision/pari/" . موارد PSG الرقمية . مؤرشف من الأصل في 6 نوفمبر 2024.
- ↑ "الدوال الرياضية" . توثيق PHP .
- ↑ "الدوال الرياضية" . وثائق مكتبة بايثون القياسية .
- ↑ "4.3.2 الأرقام العامة" . وثائق Racket .
- ↑ "فئة عدد صحيح - وثائق RDoc" . وثائق RDoc .
- ↑ "i32 - Rust" . std - Rust .
- ↑ "i32 - Rust" . std - Rust .
- ↑ "عناصر حلقة الأعداد الصحيحة ℤ - حلقات التبديل القياسية" . وثائق SageMath .
- ↑ "التقرير السابع المنقح حول لغة البرمجة الخوارزمية Scheme" . معايير Scheme .
- ↑ "صفحة دليل الدوال الرياضية - دوال Tcl الرياضية" . دليل Tcl/Tk 8.6 .
- ↑ "std.math.sqrt.sqrt - وثائق Zig" . الصفحة الرئيسية ⚡ لغة برمجة Zig .
- ↑ بيسيانو، ماريوس (5 فبراير 2003). "دورة الكسر المستمر لجذر(ن)" (ملف PDF) . النظرية 2.3. مؤرشف (ملف PDF) من الأصل في 21 ديسمبر 2015. تم الاطلاع عليه في 5 أكتوبر 2025 .
روابط خارجية
- جارفيس، آشلي فريزر (2006). "الجذور التربيعية بالطرح" (ملف PDF) . الطيف الرياضي . 37 : 119-122 .
- مينسكي، مارفن (1967). "9. الأعداد الحقيقية القابلة للحساب". الحوسبة: الآلات المحدودة وغير المحدودة . برنتيس هول. ISBN 0-13-165563-9. OCLC 0131655639 .
- "نظرة هندسية لخوارزمية الجذر التربيعي" .
- خوارزميات نظرية الأعداد
- نظرية الأعداد
- خوارزميات البحث عن الجذور
