<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>بايثون on kenji.blog</title><link>http://kenji.blog/ar/categories/%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/</link><description>Recent content in بايثون on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>ar</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 08:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/ar/categories/%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/index.xml" rel="self" type="application/rss+xml"/><item><title>محاكاة خوارزمية شور باستخدام بايثون</title><link>http://kenji.blog/ar/p/shors-algorithm-simulation-python/</link><pubDate>Fri, 11 Sep 2026 08:00:00 +0900</pubDate><guid>http://kenji.blog/ar/p/shors-algorithm-simulation-python/</guid><description>&lt;img src="http://kenji.blog/p/shors-algorithm-simulation-python/img/eyecatch.jpg" alt="Featured image of post محاكاة خوارزمية شور باستخدام بايثون" />&lt;h1 id="1-مقدمة-أزمة-التشفير-التي-تجلبها-الحواسيب-الكمومية">1. مقدمة: أزمة التشفير التي تجلبها الحواسيب الكمومية
&lt;/h1>&lt;p>تعتمد معظم معايير الأمان في مجتمع الإنترنت الحديث على &lt;strong>تشفير المفتاح العام&lt;/strong> (خاصة تشفير RSA). عندما نرسل معلومات بطاقة الائتمان الخاصة بنا للتسوق عبر الإنترنت أو نتبادل البيانات شديدة السرية، فإن محتوى هذه الاتصالات محمي بقوة بواسطة تشفير RSA.&lt;/p>
&lt;p>يعتمد أساس أمان تشفير RSA على حقيقة رياضية مفادها أن &amp;ldquo;&lt;strong>تحليل الأعداد الصحيحة الضخمة إلى عواملها الأولية يعد أمرًا بالغ الصعوبة بالنسبة للحواسيب الكلاسيكية (مثل أجهزة الكمبيوتر الشخصية والحواسيب الخارقة التي نستخدمها عادةً)&lt;/strong>&amp;rdquo;. ومع ذلك، فإن &amp;ldquo;&lt;strong>خوارزمية شور (Shor&amp;rsquo;s Algorithm)&lt;/strong>&amp;rdquo; التي أعلن عنها بيتر شور (Peter Shor) في عام 1994، قلبت هذا الافتراض رأسًا على عقب. لقد تم إثبات رياضيًا أنه إذا تم تشغيل خوارزمية شور على حاسوب كمومي واسع النطاق، فيمكنها حل مشاكل تحليل العوامل الأولية التي قد تستغرق من الحواسيب الكلاسيكية وقتًا أطول من عمر الكون، في غضون بضع دقائق إلى بضع ساعات.&lt;/p>
&lt;p>في هذا المقال، سنشرح بالتفصيل الدقيق كيف تقوم خوارزمية شور بتحليل العوامل الأولية بسرعة، بدءًا من آليتها الرياضية وحتى التنفيذ العملي للمحاكاة باستخدام بايثون وإطار عمل الحوسبة الكمومية &lt;strong>Qiskit&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="2-تغيير-جذري-في-التعقيد-الحسابي-من-الوقت-الأسي-إلى-الوقت-متعدد-الحدود">2. تغيير جذري في التعقيد الحسابي: من الوقت الأسي إلى الوقت متعدد الحدود
&lt;/h1>&lt;p>لماذا يعد تحليل العوامل الأولية صعبًا؟ حتى لو استخدمنا &amp;ldquo;طريقة غربال حقل الأعداد العام (General Number Field Sieve, GNFS)&amp;quot;، والتي تُعرف بأنها أفضل خوارزمية لتحليل العوامل الأولية في الحواسيب الكلاسيكية، فإن تعقيدها الحسابي سيكون شبه أسي.&lt;/p>
&lt;p>يُعطى الوقت اللازم لتحليل عدد مؤلف من $N$ خانة إلى عوامله الأولية باستخدام الطرق الكلاسيكية على النحو التالي:&lt;/p>
$$ O\left(\exp\left( c (\log N)^{1/3} (\log \log N)^{2/3} \right)\right) $$
&lt;p>لهذا السبب، بمجرد زيادة طول المفتاح (على سبيل المثال، إلى 2048 بت أو 4096 بت)، فإن فك التشفير باستخدام الحواسيب الكلاسيكية سيستغرق وقتًا غير واقعي، مثل آلاف أو عشرات الآلاف من السنين.&lt;/p>
&lt;p>ومع ذلك، عند استخدام &lt;strong>خوارزمية شور&lt;/strong> على حاسوب كمومي، يتم تقليل التعقيد الحسابي بشكل كبير إلى وقت متعدد الحدود بالنسبة لعدد البتات المدخلة $\log N$.&lt;/p>
$$ O((\log N)^3) $$
&lt;p>هذا يعني أنه إذا قمنا بمضاعفة عدد البتات، فإن وقت الحساب سيزداد بشكل فلكي على الحاسوب الكلاسيكي، بينما سيزداد على الأكثر بحوالي 8 أضعاف على الحاسوب الكمومي. هذا &lt;strong>التقليل في فئة التعقيد الحسابي من الوقت الأسي إلى الوقت متعدد الحدود (الشمول في فئة BQP)&lt;/strong> هو العظمة الحقيقية لخوارزمية شور.&lt;/p>
&lt;div class="mermaid">graph TD
A["زيادة حجم الإدخال (عدد البتات) N"] --> B{"اختيار الخوارزمية"}
B -->|كلاسيكية: غربال حقل الأعداد العام| C["زيادة شبه أسية O(exp(...))"]
B -->|كمومية: خوارزمية شور| D["وقت متعدد الحدود O((log N)^3)"]
C --> E["آلاف إلى مليارات السنين (غير قابل للفك)"]
D --> F["بضع دقائق إلى ساعات (وقت واقعي للفك)"]&lt;/div>
&lt;hr>
&lt;h1 id="3-النظرة-العامة-للخوارزمية-والخلفية-الرياضية">3. النظرة العامة للخوارزمية والخلفية الرياضية
&lt;/h1>&lt;p>في الواقع، لا تقوم خوارزمية شور بتنفيذ كل شيء على الحاسوب الكمومي. إنها تعتمد على التعاون بين المعالجة المسبقة واللاحقة التي يقوم بها الحاسوب الكلاسيكي، والجزء الأساسي (خوارزمية إيجاد الدورة) الذي يقوم به الحاسوب الكمومي.&lt;/p>
&lt;p>التدفق العام للخوارزمية هو كما يلي.&lt;/p>
&lt;div class="mermaid">graph TD
A["المدخل: العدد المؤلف المراد تحليله N"] --> B["اختيار رقم عشوائي a بحيث a &lt; N"]
B --> C{"gcd(a, N) > 1 ?"}
C -- "نعم" --> D["إخراج العامل البديهي gcd(a, N) والإنهاء"]
C -- "لا" --> E["استخدام الخوارزمية الكمومية لإيجاد الدورة r للدالة f(x) = a^x mod N"]
E --> F{"r زوجي و a^(r/2) ≢ -1 mod N ؟"}
F -- "لا" --> B
F -- "نعم" --> G["حساب العوامل p = gcd(a^(r/2) - 1, N), q = gcd(a^(r/2) + 1, N)"]
G --> H["الإخراج: p, q"]&lt;/div>
&lt;h2 id="اختزال-تحليل-العوامل-الأولية-إلى-مشكلة-إيجاد-الدورة">اختزال تحليل العوامل الأولية إلى مشكلة إيجاد الدورة
&lt;/h2>&lt;p>تكمن عبقرية شور في تحويله لـ &amp;ldquo;&lt;strong>مشكلة تحليل العوامل الأولية&lt;/strong>&amp;rdquo; إلى &amp;ldquo;&lt;strong>مشكلة إيجاد الدورة (Order Finding Problem)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>نعتبر عددًا صحيحًا $N$ (الرقم المراد تحليله)، وعددًا صحيحًا أوليًا نسبيًا معه $a$ ($1 &lt; a &lt; N$). نُعرّف دالة الأس النمطية التالية:&lt;/p>
$$ f(x) = a^x \bmod N $$
&lt;p>هذه الدالة لها دورة معينة $r$. أي أنه لأي $x$، يتحقق $f(x+r) = f(x)$. بشكل خاص، عندما يكون $x=0$:&lt;/p>
$$ a^r \equiv 1 \pmod N $$
&lt;p>أصغر عدد صحيح موجب $r$ يحقق هذا يسمى &amp;ldquo;رتبة (Order) العدد $a$ قياسًا لـ $N$&amp;rdquo;. إذا تمكنا من إيجاد هذه الدورة $r$، فيمكننا استنتاج العوامل الأولية بالطريقة التالية.&lt;/p>
&lt;p>بتعديل المعادلة:
&lt;/p>
$$ a^r - 1 \equiv 0 \pmod N $$
&lt;p>
إذا كان $r$ عددًا زوجيًا، يمكننا تحليله باستخدام صيغة الفرق بين مربعين:
&lt;/p>
$$ (a^{r/2} - 1)(a^{r/2} + 1) \equiv 0 \pmod N $$
&lt;p>هذا يعني أن $N$ يشترك في قاسم مشترك إما مع $(a^{r/2} - 1)$ أو $(a^{r/2} + 1)$ (بشرط أن يحقق الشرط $a^{r/2} \not\equiv -1 \pmod N$). وبالتالي، باستخدام خوارزمية إقليدس:&lt;/p>
$$ p = \gcd(a^{r/2} - 1, N) $$
$$ q = \gcd(a^{r/2} + 1, N) $$
&lt;p>بحساب ما سبق، يمكننا العثور على العوامل الأولية غير البديهية $p, q$ للعدد $N$. يمكن إجراء هذا الحساب (حساب القاسم المشترك الأكبر وتوليد الأرقام العشوائية) بسرعة كبيرة على الحواسيب الكلاسيكية. المشكلة تقتصر على &lt;strong>كيفية إيجاد الدورة $r$ بسرعة&lt;/strong>. في الحواسيب الكلاسيكية، يستغرق إيجاد هذه الدورة $r$ نفسها وقتًا أسيًا. وهنا يأتي دور الحواسيب الكمومية.&lt;/p>
&lt;hr>
&lt;h1 id="4-جزء-الخوارزمية-الكمومية-آلية-إيجاد-الدورة">4. جزء الخوارزمية الكمومية: آلية إيجاد الدورة
&lt;/h1>&lt;p>يتكون الروتين الفرعي لإيجاد الدورة $r$ باستخدام الحاسوب الكمومي من الخطوات الأربع التالية:&lt;/p>
&lt;div class="mermaid">graph LR
subgraph "انتقال الحالة الكمومية"
S1["|0⟩|0⟩ (التهيئة)"] --> S2["بوابة H: التراكب Σ|x⟩|0⟩"]
S2 --> S3["الأوراكل U: Σ|x⟩|a^x mod N⟩"]
S3 --> S4["QFT: استخراج الدورة عبر التداخل"]
S4 --> S5["القياس: الحصول على القيمة التقريبية y"]
end&lt;/div>
&lt;h2 id="الخطوة-1-تهيئة-السجل-الكمومي-والتراكب">الخطوة 1: تهيئة السجل الكمومي والتراكب
&lt;/h2>&lt;p>أولاً، نُعد سجلين كموميين. السجل الأول يُستخدم لإدخال الحالة، والسجل الثاني لتخزين نتيجة حساب الدالة.
الحالة الأولية هي كلها $|0\rangle$.&lt;/p>
$$ |\psi_0\rangle = |0\rangle_1 |0\rangle_2 $$
&lt;p>نطبق بوابة هادامارد (Hadamard Gate) على جميع البتات الكمومية في السجل الأول، لإنشاء حالة تراكب متساوية الاحتمال لجميع المدخلات الممكنة $x$ (من $0$ إلى $Q-1$، حيث $Q=2^n$).&lt;/p>
$$ |\psi_1\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle_1 |0\rangle_2 $$
&lt;p>وبهذا، يحتفظ الحاسوب الكمومي بحالة لجميع المدخلات الـ $Q$ في نفس الوقت بعملية واحدة. هذا هو المصدر القوي لـ &lt;strong>التوازي الكمومي&lt;/strong>.&lt;/p>
&lt;h2 id="الخطوة-2-تطبيق-دالة-الأوراكل-الأسية-النمطية">الخطوة 2: تطبيق دالة الأوراكل (الأسية النمطية)
&lt;/h2>&lt;p>بعد ذلك، باستخدام الدائرة المنطقية الكمومية $U_f$، نحسب الدالة $f(x) = a^x \bmod N$ ونخزن النتيجة في السجل الثاني.&lt;/p>
$$ |\psi_2\rangle = \frac{1}{\sqrt{Q}} \sum_{x=0}^{Q-1} |x\rangle_1 |a^x \bmod N\rangle_2 $$
&lt;p>في هذه المرحلة، يكون السجلان الأول والثاني في حالة &lt;strong>تشابك كمومي (Entanglement)&lt;/strong>. إذا قمنا (افتراضيًا) برصد السجل الثاني وحصلنا على قيمة معينة $k = a^{x_0} \bmod N$، فإن حالة السجل الأول ستنهار إلى تراكب لقيم $x$ التي تعطي تلك القيمة $k$. نظرًا لأن دورة الدالة هي $r$، ستكون الحالات المتبقية هي قيم تبعد بمسافة $r$، أي $x_0, x_0+r, x_0+2r, \dots$.&lt;/p>
$$ |\psi_3\rangle = \sqrt{\frac{r}{Q}} \sum_{j=0}^{M-1} |x_0 + j r\rangle_1 |k\rangle_2 $$
&lt;p>ولكن، نحن لا نريد معرفة $x_0$، بل نريد معرفة الدورة $r$ نفسها. من المستحيل ملاحظة $r$ مباشرة من هذه الحالة. لذلك، نستخدم تحويل فورييه الكمومي.&lt;/p>
&lt;h2 id="الخطوة-3-التداخل-الطوري-بواسطة-تحويل-فورييه-الكمومي-qft">الخطوة 3: التداخل الطوري بواسطة تحويل فورييه الكمومي (QFT)
&lt;/h2>&lt;p>نُطبق &lt;strong>تحويل فورييه الكمومي (Quantum Fourier Transform, QFT)&lt;/strong> على السجل الأول. QFT هو النسخة الكمومية من تحويل فورييه المتقطع الكلاسيكي، ويقوم بتحويل سعات متجه الحالة. يُعرّف تأثير QFT على حالة الأساس $|x\rangle$ على النحو التالي:&lt;/p>
$$ QFT |x\rangle = \frac{1}{\sqrt{Q}} \sum_{y=0}^{Q-1} \omega^{xy} |y\rangle $$
&lt;p>حيث $\omega = e^{2\pi i / Q}$.&lt;/p>
&lt;p>عند تطبيق QFT، تتداخل سعات الحالة. دون الدخول في التفاصيل الرياضية المعقدة، عند تطبيق QFT على حالة ذات دورة $r$، فإن الموجة تُحدث &lt;strong>تداخلاً بناءً (Constructive Interference)&lt;/strong> فقط عندما تكون $y$ قريبة جدًا من مضاعف صحيح للرقم $Q/r$. أما الحالات الأخرى فتُلغى فيها سعات الاحتمال بسبب &lt;strong>التداخل الهدام (Destructive Interference)&lt;/strong> وتقترب من الصفر.&lt;/p>
&lt;h2 id="الخطوة-4-القياس-والتوسع-في-الكسور-المستمرة">الخطوة 4: القياس والتوسع في الكسور المستمرة
&lt;/h2>&lt;p>أخيرًا، نقيس السجل الأول. القيمة $y$ التي يتم الحصول عليها بالقياس ستحقق الشرط التالي باحتمال كبير:&lt;/p>
$$ y \approx c \frac{Q}{r} \implies \frac{y}{Q} \approx \frac{c}{r} $$
&lt;p>(حيث $c$ هو عدد صحيح مجهول يحقق $0 \le c &lt; r$)&lt;/p>
&lt;p>من خلال تطبيق الخوارزمية الكلاسيكية لـ &lt;strong>الكسور المستمرة (Continued Fraction Expansion)&lt;/strong> على العدد الكسري الناتج $y/Q$، يمكننا حساب الكسر التقريبي $c/r$ واستخراج الدورة $r$ من المقام.&lt;/p>
&lt;hr>
&lt;h1 id="5-محاكاة-التنفيذ-باستخدام-بايثون-و-qiskit">5. محاكاة التنفيذ باستخدام بايثون و Qiskit
&lt;/h1>&lt;p>لأن النظرية وحدها قد لا تعطي إحساسًا ملموسًا، دعونا نقوم بمحاكاة خوارزمية شور فعليًا باستخدام بايثون وإطار عمل الحوسبة الكمومية من IBM &lt;strong>Qiskit&lt;/strong>.&lt;/p>
&lt;p>هنا، سننفذ السيناريو الكلاسيكي والأكثر شهرة وهو &amp;ldquo;&lt;strong>تحليل $N=15$ باستخدام $a=7$&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;h2 id="إعداد-بيئة-التشغيل">إعداد بيئة التشغيل
&lt;/h2>&lt;p>يرجى تثبيت Qiskit مسبقًا.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">pip install qiskit qiskit-aer numpy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="النظرة-العامة-على-كود-بايثون">النظرة العامة على كود بايثون
&lt;/h2>&lt;p>الكود التالي هو مثال تنفيذي لخوارزمية شور مخصص لـ $N=15, a=7$. نظرًا لأن بناء دائرة أسية نمطية عامة مكلف جدًا في المحاكيات الحالية، فقد قمنا بترميز سلوك البوابات المنطقية للحالة الخاصة $a=7$.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt"> 10
&lt;/span>&lt;span class="lnt"> 11
&lt;/span>&lt;span class="lnt"> 12
&lt;/span>&lt;span class="lnt"> 13
&lt;/span>&lt;span class="lnt"> 14
&lt;/span>&lt;span class="lnt"> 15
&lt;/span>&lt;span class="lnt"> 16
&lt;/span>&lt;span class="lnt"> 17
&lt;/span>&lt;span class="lnt"> 18
&lt;/span>&lt;span class="lnt"> 19
&lt;/span>&lt;span class="lnt"> 20
&lt;/span>&lt;span class="lnt"> 21
&lt;/span>&lt;span class="lnt"> 22
&lt;/span>&lt;span class="lnt"> 23
&lt;/span>&lt;span class="lnt"> 24
&lt;/span>&lt;span class="lnt"> 25
&lt;/span>&lt;span class="lnt"> 26
&lt;/span>&lt;span class="lnt"> 27
&lt;/span>&lt;span class="lnt"> 28
&lt;/span>&lt;span class="lnt"> 29
&lt;/span>&lt;span class="lnt"> 30
&lt;/span>&lt;span class="lnt"> 31
&lt;/span>&lt;span class="lnt"> 32
&lt;/span>&lt;span class="lnt"> 33
&lt;/span>&lt;span class="lnt"> 34
&lt;/span>&lt;span class="lnt"> 35
&lt;/span>&lt;span class="lnt"> 36
&lt;/span>&lt;span class="lnt"> 37
&lt;/span>&lt;span class="lnt"> 38
&lt;/span>&lt;span class="lnt"> 39
&lt;/span>&lt;span class="lnt"> 40
&lt;/span>&lt;span class="lnt"> 41
&lt;/span>&lt;span class="lnt"> 42
&lt;/span>&lt;span class="lnt"> 43
&lt;/span>&lt;span class="lnt"> 44
&lt;/span>&lt;span class="lnt"> 45
&lt;/span>&lt;span class="lnt"> 46
&lt;/span>&lt;span class="lnt"> 47
&lt;/span>&lt;span class="lnt"> 48
&lt;/span>&lt;span class="lnt"> 49
&lt;/span>&lt;span class="lnt"> 50
&lt;/span>&lt;span class="lnt"> 51
&lt;/span>&lt;span class="lnt"> 52
&lt;/span>&lt;span class="lnt"> 53
&lt;/span>&lt;span class="lnt"> 54
&lt;/span>&lt;span class="lnt"> 55
&lt;/span>&lt;span class="lnt"> 56
&lt;/span>&lt;span class="lnt"> 57
&lt;/span>&lt;span class="lnt"> 58
&lt;/span>&lt;span class="lnt"> 59
&lt;/span>&lt;span class="lnt"> 60
&lt;/span>&lt;span class="lnt"> 61
&lt;/span>&lt;span class="lnt"> 62
&lt;/span>&lt;span class="lnt"> 63
&lt;/span>&lt;span class="lnt"> 64
&lt;/span>&lt;span class="lnt"> 65
&lt;/span>&lt;span class="lnt"> 66
&lt;/span>&lt;span class="lnt"> 67
&lt;/span>&lt;span class="lnt"> 68
&lt;/span>&lt;span class="lnt"> 69
&lt;/span>&lt;span class="lnt"> 70
&lt;/span>&lt;span class="lnt"> 71
&lt;/span>&lt;span class="lnt"> 72
&lt;/span>&lt;span class="lnt"> 73
&lt;/span>&lt;span class="lnt"> 74
&lt;/span>&lt;span class="lnt"> 75
&lt;/span>&lt;span class="lnt"> 76
&lt;/span>&lt;span class="lnt"> 77
&lt;/span>&lt;span class="lnt"> 78
&lt;/span>&lt;span class="lnt"> 79
&lt;/span>&lt;span class="lnt"> 80
&lt;/span>&lt;span class="lnt"> 81
&lt;/span>&lt;span class="lnt"> 82
&lt;/span>&lt;span class="lnt"> 83
&lt;/span>&lt;span class="lnt"> 84
&lt;/span>&lt;span class="lnt"> 85
&lt;/span>&lt;span class="lnt"> 86
&lt;/span>&lt;span class="lnt"> 87
&lt;/span>&lt;span class="lnt"> 88
&lt;/span>&lt;span class="lnt"> 89
&lt;/span>&lt;span class="lnt"> 90
&lt;/span>&lt;span class="lnt"> 91
&lt;/span>&lt;span class="lnt"> 92
&lt;/span>&lt;span class="lnt"> 93
&lt;/span>&lt;span class="lnt"> 94
&lt;/span>&lt;span class="lnt"> 95
&lt;/span>&lt;span class="lnt"> 96
&lt;/span>&lt;span class="lnt"> 97
&lt;/span>&lt;span class="lnt"> 98
&lt;/span>&lt;span class="lnt"> 99
&lt;/span>&lt;span class="lnt">100
&lt;/span>&lt;span class="lnt">101
&lt;/span>&lt;span class="lnt">102
&lt;/span>&lt;span class="lnt">103
&lt;/span>&lt;span class="lnt">104
&lt;/span>&lt;span class="lnt">105
&lt;/span>&lt;span class="lnt">106
&lt;/span>&lt;span class="lnt">107
&lt;/span>&lt;span class="lnt">108
&lt;/span>&lt;span class="lnt">109
&lt;/span>&lt;span class="lnt">110
&lt;/span>&lt;span class="lnt">111
&lt;/span>&lt;span class="lnt">112
&lt;/span>&lt;span class="lnt">113
&lt;/span>&lt;span class="lnt">114
&lt;/span>&lt;span class="lnt">115
&lt;/span>&lt;span class="lnt">116
&lt;/span>&lt;span class="lnt">117
&lt;/span>&lt;span class="lnt">118
&lt;/span>&lt;span class="lnt">119
&lt;/span>&lt;span class="lnt">120
&lt;/span>&lt;span class="lnt">121
&lt;/span>&lt;span class="lnt">122
&lt;/span>&lt;span class="lnt">123
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit_aer&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">AerSimulator&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit.visualization&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">plot_histogram&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">from&lt;/span> &lt;span class="nn">fractions&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Fraction&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">math&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. دالة لإنشاء تحويل فورييه الكمومي العكسي (QFT†)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">qft_dagger&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;إنشاء دائرة تحويل فورييه الكمومي العكسي لـ n بت كمومي&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># بوابة SWAP لعكس الترتيب&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">qubit&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qubit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">qubit&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تطبيق بوابة الطور المتحكم فيها وبوابة H&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">j&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">m&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">cp&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">pi&lt;/span>&lt;span class="o">/&lt;/span>&lt;span class="nb">float&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">)),&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">j&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">j&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;QFT_dagger&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">qc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. دالة لإنشاء عملية الأس النمطية المتحكم فيها 7^x mod 15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">c_amod15&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">power&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;إنشاء بوابة U للتحكم لـ a وأس معينين (مخصص لـ N=15)&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">power&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># منطق مرمز لحالة 7^x mod 15 عندما a=7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">13&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">8&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">11&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">swap&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">7&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">11&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="mi">13&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">to_gate&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">^&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">power&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> mod 15&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">c_U&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">U&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">control&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">c_U&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. تكوين الدائرة الكمومية الرئيسية&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">shor_circuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n_count&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># n_count: عدد بتات سجل التحكم&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># سجل الهدف يحتاج 4 بتات لتمثيل 0 إلى 15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">QuantumCircuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">4&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n_count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تهيئة السجل الأول (سجل التحكم) (إنشاء تراكب)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">h&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تهيئة السجل الثاني (سجل الهدف) إلى |1&amp;gt; (0001)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">x&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">n_count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تطبيق عملية الأس النمطية المتحكم فيها (الأوراكل)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تطبيق عملية 2^q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">c_amod15&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">),&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">[&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="o">+&lt;/span>&lt;span class="n">n_count&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">4&lt;/span>&lt;span class="p">)])&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تطبيق تحويل فورييه الكمومي العكسي على السجل الأول&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qft_dagger&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># قياس السجل الأول&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">measure&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">qc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># --- قسم التنفيذ ---&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;__main__&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">N&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">7&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n_count&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">8&lt;/span> &lt;span class="c1"># استخدام 8 بتات كمومية في سجل التحكم (Q=256)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;إعدادات البحث: N=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, a=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, عدد بتات التحكم=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># إنشاء الدائرة&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">qc&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">shor_circuit&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n_count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># التنفيذ على المحاكي&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">sim&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">AerSimulator&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># يوصى باستخدام transpile في الإصدارات الأحدث من Qiskit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kn">from&lt;/span> &lt;span class="nn">qiskit&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">transpile&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">compiled_circuit&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">transpile&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">qc&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">sim&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">job&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sim&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">run&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">compiled_circuit&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shots&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">1024&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">job&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">result&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">counts&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_counts&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">نتائج القياس (سلسلة البتات: عدد مرات الرصد):&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">bitstring&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">count&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">counts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">items&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">bitstring&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">count&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> مرات&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># المعالجة البعدية الكلاسيكية: تحديد الدورة r بواسطة الكسور المستمرة&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">--- حساب الدورة وتحليل العوامل الأولية ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phases&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">output&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">counts&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># تحويل سلسلة البتات إلى عدد عشري&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decimal&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># الطور = القيمة المقاسة / 2^n_count&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phase&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">decimal&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="n">n_count&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phases&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">phase&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># الحصول على كسر تقريبي عبر الكسور المستمرة. أقصى مقام هو N=15&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">frac&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Fraction&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">phase&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">limit_denominator&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">15&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">frac&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">denominator&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;القيمة المرصودة: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decimal&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">3d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> | الطور: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">phase&lt;/span>&lt;span class="si">:&lt;/span>&lt;span class="s2">.4f&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> | الكسر المستمر: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">frac&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> | الدورة المقدرة r = &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># التأكد مما إذا كانت الدورة r زوجية وتعطي نتائج صالحة&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">r&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">guess1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">math&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">guess2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">math&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">r&lt;/span>&lt;span class="o">//&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">guess1&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="ow">or&lt;/span> &lt;span class="n">guess2&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">N&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; =&amp;gt; نجاح！ عوامل &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">N&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> الأولية هي &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">guess1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> و &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">guess2&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; =&amp;gt; عوامل بديهية فقط. يرجى إعادة المحاولة.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34; =&amp;gt; فشل لأن الدورة فردية.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="شرح-الكود-وتحليل-نتائج-التنفيذ">شرح الكود وتحليل نتائج التنفيذ
&lt;/h2>&lt;p>عند تشغيل الكود أعلاه، سنحصل باحتمال كبير على ذروات معينة (قيم مرصودة) كنتيجة لقياس سجل التحكم. في حالة &lt;code>n_count=8&lt;/code> ($Q=256$)، إذا استخدمنا حاسوبًا كموميًا مثاليًا (أو محاكيًا)، فإن القيم مثل &lt;code>0&lt;/code>, &lt;code>64&lt;/code>, &lt;code>128&lt;/code>, &lt;code>192&lt;/code> ستظهر باحتمال هائل.&lt;/p>
&lt;p>عند تقسيم هذه القيم على $Q=256$، سنجد أن الطور $y/Q$ يصبح $0.0$, $0.25$, $0.5$, $0.75$ على التوالي.
عند توسيع هذه الأطوار إلى كسور مستمرة، نحصل على:&lt;/p>
&lt;ul>
&lt;li>$0.25 \to 1/4$ (الدورة المقدرة $r=4$)&lt;/li>
&lt;li>$0.50 \to 1/2$ (الدورة المقدرة $r=2$)&lt;/li>
&lt;li>$0.75 \to 3/4$ (الدورة المقدرة $r=4$)&lt;/li>
&lt;/ul>
&lt;p>باستخدام الدورة $r=4$ التي حصلنا عليها هنا، نحسب العوامل الأولية.
بما أن $a=7, r=4$:
$p = \gcd(7^2 - 1, 15) = \gcd(48, 15) = 3$
$q = \gcd(7^2 + 1, 15) = \gcd(50, 15) = 5$&lt;/p>
&lt;p>لقد نجحنا بنجاح كبير في تحليل $15 = 3 \times 5$ إلى عوامله الأولية.&lt;/p>
&lt;blockquote>
&lt;p>[!TIP]
إذا تم الحصول على القيمة المقاسة $y=128$ (الطور $0.5$)، فإن المقام يصبح $2$، ونحصل على قاسم للدورة الحقيقية بدلاً من الدورة $r=4$. في مثل هذه الحالات، يمكننا الوصول إلى الدورة الحقيقية بتنفيذ الخوارزمية عدة مرات أو عن طريق التحقق من مضاعفات الـ $r$ التي حصلنا عليها.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="6-تحديات-التطبيق-العملي-وحدود-عصر-nisq">6. تحديات التطبيق العملي وحدود عصر NISQ
&lt;/h1>&lt;p>على الرغم من سهولة تحليل $N=15$ على المحاكي، إلا أنه لا تزال هناك عقبات عديدة أمام الحواسيب الكمومية الفعلية لتحليل تشفير RSA-2048 المستخدم في العالم الحقيقي (والذي يتكون من 617 رقمًا عشريًا).&lt;/p>
&lt;p>يُطلق على العصر الذي نعيش فيه الآن اسم &lt;strong>عصر NISQ (Noisy Intermediate-Scale Quantum: الحواسيب الكمومية متوسطة الحجم والمصحوبة بالضوضاء)&lt;/strong>. البتات الكمومية حساسة للغاية لضوضاء البيئة الخارجية، وتتسبب في حدوث &amp;ldquo;فقدان الترابط (Decoherence)&amp;rdquo; أثناء العمليات الحسابية، مما يؤدي إلى تدمير حالتها.&lt;/p>
&lt;p>لتنفيذ دائرة عميقة (تحتوي على عدد كبير من البوابات) مثل خوارزمية شور بدقة، فإن &lt;strong>تصحيح الأخطاء الكمومية (Quantum Error Correction)&lt;/strong> أمر لا غنى عنه. لإنشاء &amp;ldquo;بت كمومي منطقي&amp;rdquo; واحد خالٍ من الضوضاء، يلزم تشفير آلاف &amp;ldquo;البتات الكمومية المادية&amp;rdquo; باستخدام رمز السطح (Surface Code) أو طرق مشابهة.&lt;/p>
&lt;p>لكسر تشفير RSA ذي الـ 2048 بت، يُقدر أننا نحتاج إلى آلاف البتات الكمومية المنطقية المثالية، ولتحقيق ذلك نحتاج إلى حاسوب كمومي متسامح مع الأخطاء يحتوي على &lt;strong>ملايين إلى عشرات الملايين من البتات الكمومية المادية&lt;/strong>. نظرًا لأن أحدث المعالجات الكمومية الحالية تحتوي فقط على مئات إلى آلاف البتات الكمومية المادية، فلن يتم كسر أنظمة التشفير في العالم على الفور.&lt;/p>
&lt;blockquote>
&lt;p>[!WARNING]
ومع ذلك، هناك نموذج تهديد يُعرف باسم &amp;ldquo;خزّن الآن، وفك التشفير لاحقًا (Store Now, Decrypt Later)&amp;rdquo;. يمكن للمهاجمين تخزين كميات هائلة من الاتصالات السرية المشفرة حاليًا كما هي، واعتماد استراتيجية لفك تشفيرها بالكامل في اللحظة التي يتم فيها إنجاز حاسوب كمومي قوي بعد 10 إلى 20 عامًا.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="7-الانتقال-إلى-التشفير-ما-بعد-الكمومي-pqc">7. الانتقال إلى التشفير ما بعد الكمومي (PQC)
&lt;/h1>&lt;p>استعدادًا لمجيء &amp;ldquo;Q-Day (اليوم الذي تكسر فيه الحواسيب الكمومية التشفير)&amp;quot;، يعكف علماء التشفير حول العالم، بقيادة المعهد الوطني للمعايير والتقنية (NIST) في الولايات المتحدة، على تطوير معايير &lt;strong>التشفير ما بعد الكمومي (Post-Quantum Cryptography, PQC)&lt;/strong>.&lt;/p>
&lt;p>يعتمد PQC على مسائل رياضية جديدة (مثل مشاكل الشبكات، ومسائل كثيرات الحدود متعددة المتغيرات، والطرق المعتمدة على دوال التجزئة) والتي يُعتقد رياضيًا أنه لا يمكن حلها بكفاءة حتى باستخدام خوارزمية شور (أو حتى خوارزمية جروفر). لقد تم بالفعل اختيار خوارزميات مثل &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; و &amp;ldquo;CRYSTALS-Dilithium&amp;rdquo; كمعايير قياسية، وبدأ دمجها تدريجيًا في بروتوكولات الاتصال الخاصة بـ iMessage من Apple ومختلف متصفحات الويب.&lt;/p>
&lt;p>بالنسبة للمهندسين الذين يديرون البنية التحتية لتكنولوجيا المعلومات، فإن دمج &amp;ldquo;المرونة التشفيرية (Crypto-Agility: التصميم الذي يسمح بالتبديل السريع لأساليب التشفير)&amp;rdquo; في الأنظمة للانتقال من تشفير RSA ومنحنيات إهليلجية الحالي إلى PQC سيكون مهمة حاسمة في المستقبل.&lt;/p>
&lt;hr>
&lt;h1 id="8-خاتمة">8. خاتمة
&lt;/h1>&lt;p>في هذا المقال، قمنا بشرح مفصل ومكثف بخلفية نظرية واسعة، بدءًا من الأساس الرياضي النظري لخوارزمية شور، مرورًا بآلية استخراج الدورة باستخدام تحويل فورييه الكمومي، وصولاً إلى كود المحاكاة العملي باستخدام بايثون و Qiskit.&lt;/p>
&lt;p>حقيقة أن القوانين الفيزيائية للعالم المجهري (ميكانيكا الكم) يمكن أن تقلب المفاهيم الأساسية لعلم المعلومات الماكروسكوبي مثل نظرية التعقيد الحسابي ونظرية التشفير رأسًا على عقب، هي واحدة من أكثر التحولات النموذجية إثارة في تاريخ العلم. لن نرفع أعيننا عن تقنية الحوسبة الكمومية التي تستمر في التطور حاليًا، والمعركة التي تخوضها ضد تقنيات التشفير الجديدة.&lt;/p>
&lt;p>ندعوك لتشغيل كود بايثون المقدم هنا في بيئتك الخاصة لتجربة &amp;ldquo;سحر الحوسبة&amp;rdquo; الذي يولده التراكب والتداخل في الحالات الكمومية.&lt;/p>
&lt;hr>
&lt;p>&lt;strong>المراجع&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Shor, P. W. (1994). &amp;ldquo;Algorithms for quantum computation: discrete logarithms and factoring&amp;rdquo;. Proceedings 35th Annual Symposium on Foundations of Computer Science.&lt;/li>
&lt;li>Nielsen, M. A., &amp;amp; Chuang, I. L. (2010). &amp;ldquo;Quantum Computation and Quantum Information&amp;rdquo;. Cambridge University Press.&lt;/li>
&lt;li>Qiskit Documentation: &lt;a class="link" href="https://qiskit.org/documentation/" target="_blank" rel="noopener"
>https://qiskit.org/documentation/&lt;/a>&lt;/li>
&lt;/ul></description></item></channel></rss>