0Pricing
Competitive Programming Academy · درس

المعكوس الترديدي باستخدام فيرما

القسمة بأمان تحت ترديد

المعكوس الترديدي باستخدام فيرما درس مجاني في Competitive Programming Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Competitive Programming Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

تتعطل القسمة تحت modulo

يتصرف الجمع والطرح والضرب بصورة سليمة تحت modulus، لكن القسمة العادية لا تعمل كذلك. لا يمكنك ببساطة إجراء القسمة ثم حساب الباقي. ⚠️

استبدل القسمة بالضرب

الحل هو المعكوس modulo: تتحول القسمة على x إلى الضرب في معكوس x. لذلك تتحول a / b modulo m إلى a مضروبة في معكوس b.

ما هو المعكوس

معكوس x هو العدد الذي يعطي 1 عند ضربه في x تحت modulus. وهو يؤدي دور 1/x في الحساب العادي.

# x * inv(x) % m == 1

الأعداد الأولية تجعل ذلك ممكنًا

يوجد المعكوس فقط عندما لا يشترك x وm في أي عامل. ويضمن استخدام modulus أولي مثل 1e9+7 وجود معكوس لكل x غير صفري.

تعرّف إلى مبرهنة فيرما الصغرى

تنص مبرهنة فيرما الصغرى على أنه بالنسبة إلى عدد أولي p، يكون x مرفوعًا للقوة p ناقص 1 مكافئًا لـ 1 modulo p، ما دام x ليس من مضاعفات p.

# x^(p-1) % p == 1

اشتق المعكوس

افصل عاملًا واحدًا من x، ولا بد أن يكون الجزء المتبقي معكوسه. لذلك فإن معكوس x هو x مرفوعًا للقوة p ناقص 2، مع حساب modulo p.

# inv(x) = x^(p-2) % p

احسبه باستخدام الأسّ السريع

ذلك الأس هائل، لذا استخدم الأسّ السريع من الدرس السابق. وفي Python، ينفذ استدعاء واحد لـ pow المهمة كاملة.

inv = pow(x, MOD - 2, MOD)

استخدمه للقسمة

لحساب a مقسومًا على b تحت modulo، اضرب a في معكوس b. يكون الباقي هو حاصل القسمة الحقيقي modulo p تمامًا.

ans = a * pow(b, MOD - 2, MOD) % MOD

لا تحسب معكوس الصفر أبدًا

لا يوجد معكوس لـ 0، إذ لا يعطي ضرب أي عدد في الصفر القيمة 1. تحقّق من عدم القسمة على قيمة تختزل إلى الصفر تحت modulus.

تكلفة معكوس واحد

كل معكوس وفق مبرهنة فيرما هو عملية أسّ سريع واحدة، لذا تبلغ تكلفته O(log p). وهذا رخيص لعدد قليل من عمليات القسمة، لكنه يتراكم عند إجراء الملايين منها.

تلميح حول المعكوسات الدفعية

عندما تحتاج إلى معكوسات كثيرة، احسبها مسبقًا بمرور خطي ذكي بدلًا من استدعاء pow لكل عنصر. ستعتمد على ذلك عند حساب nCr لاحقًا.

تحقق سريع

أي قوة تعطي المعكوس modulo عند استخدام modulus أولي؟

مراجعة

يمكنك الآن إجراء القسمة تحت modulus أولي بالضرب في المعكوس modulo، المحسوب على صورة x مرفوعًا للقوة p ناقص 2 باستخدام pow. فقط لا تحسب معكوس الصفر أبدًا. ✅

الأسئلة الشائعة

هل درس «المعكوس الترديدي باستخدام فيرما» مجاني؟

نعم — نص درس «المعكوس الترديدي باستخدام فيرما» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Competitive Programming Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Competitive Programming Academy 4 دروس في المجموع.

ماذا ستتعلم في «المعكوس الترديدي باستخدام فيرما»؟

القسمة بأمان تحت ترديد تتمرن على Competitive Programming Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Competitive Programming Academy؟

لا تُشترط خبرة سابقة. Competitive Programming Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «المعكوس الترديدي باستخدام فيرما»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Competitive Programming Academy هذا؟

نعم. كل درس في Competitive Programming Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. العمل بترديد عدد أولي
  2. الرفع السريع للقوى بترديد
  3. المعكوس الترديدي باستخدام فيرما
  4. ‏nCr باستخدام المضروبات المحسوبة مسبقًا
← العودة إلى Competitive Programming Academy