<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Quantum Fourier Transform on kenji.blog</title><link>http://kenji.blog/hi/tags/quantum-fourier-transform/</link><description>Recent content in Quantum Fourier Transform on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>hi</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 08:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/hi/tags/quantum-fourier-transform/index.xml" rel="self" type="application/rss+xml"/><item><title>पायथन में शोर के एल्गोरिथ्म का सिमुलेशन</title><link>http://kenji.blog/hi/p/shors-algorithm-simulation-python/</link><pubDate>Fri, 11 Sep 2026 08:00:00 +0900</pubDate><guid>http://kenji.blog/hi/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>सार्वजनिक कुंजी क्रिप्टोग्राफी (Public Key Cryptography)&lt;/strong> (विशेष रूप से RSA एन्क्रिप्शन) पर निर्भर करता है। जब हम ऑनलाइन शॉपिंग के दौरान क्रेडिट कार्ड की जानकारी भेजते हैं या अत्यधिक गोपनीय डेटा का आदान-प्रदान करते हैं, तो उस संचार की सामग्री को RSA एन्क्रिप्शन द्वारा दृढ़ता से सुरक्षित किया जाता है।&lt;/p>
&lt;p>RSA एन्क्रिप्शन की सुरक्षा का आधार इस गणितीय तथ्य पर निर्भर करता है कि &amp;ldquo;&lt;strong>एक बहुत बड़े पूर्णांक का अभाज्य गुणनखंडन शास्त्रीय कंप्यूटरों (जैसे पीसी या सुपरकंप्यूटर) के लिए अत्यंत कठिन है&lt;/strong>।&amp;rdquo; हालाँकि, 1994 में पीटर शोर (Peter Shor) द्वारा प्रकाशित &amp;ldquo;&lt;strong>शोर का एल्गोरिथ्म (Shor&amp;rsquo;s Algorithm)&lt;/strong>&amp;rdquo; इस आधार को पूरी तरह से पलट देता है। यह गणितीय रूप से सिद्ध हो चुका है कि यदि शोर के एल्गोरिथ्म को बड़े पैमाने के क्वांटम कंप्यूटर पर निष्पादित किया जाए, तो अभाज्य गुणनखंडन, जिसे शास्त्रीय कंप्यूटर पर हल करने में ब्रह्मांड की आयु से अधिक समय लग सकता है, उसे केवल कुछ मिनटों से लेकर कुछ घंटों में हल किया जा सकता है।&lt;/p>
&lt;p>इस लेख में, हम विस्तार से बताएंगे कि कैसे शोर का एल्गोरिथ्म अभाज्य गुणनखंडन को इतनी तेज़ी से करता है, इसके गणितीय तंत्र से लेकर, क्वांटम कंप्यूटिंग फ्रेमवर्क &lt;strong>Qiskit&lt;/strong> और Python का उपयोग करके इसके विशिष्ट सिमुलेशन कार्यान्वयन तक।&lt;/p>
&lt;hr>
&lt;h1 id="2-कमपयटशनल-जटलत-म-नटकय-बदलव-घतकय-स-बहपद-समय-तक">2. कम्प्यूटेशनल जटिलता में नाटकीय बदलाव: घातांकीय से बहुपद समय तक
&lt;/h1>&lt;p>अभाज्य गुणनखंडन इतना कठिन क्यों है? भले ही हम &amp;ldquo;सामान्य संख्या क्षेत्र चलनी (General Number Field Sieve, GNFS)&amp;rdquo; का उपयोग करें, जिसे शास्त्रीय कंप्यूटरों के लिए सबसे अच्छा अभाज्य गुणनखंडन एल्गोरिथ्म माना जाता है, इसकी कम्प्यूटेशनल जटिलता उप-घातांकीय (sub-exponential) है।&lt;/p>
&lt;p>$N$ अंकों की एक समग्र संख्या (composite number) का अभाज्य गुणनखंडन करने के लिए आवश्यक समय जटिलता (time complexity) शास्त्रीय तरीकों से इस प्रकार है:&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$ की संख्या के सापेक्ष कम्प्यूटेशनल जटिलता नाटकीय रूप से कम होकर बहुपद समय (polynomial time) में आ जाती है।&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>असल में, शोर के एल्गोरिथ्म में सब कुछ क्वांटम कंप्यूटर पर नहीं किया जाता है। यह शास्त्रीय कंप्यूटर द्वारा प्री-प्रोसेसिंग और पोस्ट-प्रोसेसिंग, और क्वांटम कंप्यूटर द्वारा मुख्य भाग (अवधि खोजने का एल्गोरिथ्म - Period Finding Algorithm) के बीच सहयोग पर निर्भर करता है।&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 -- "Yes" --> D["तुच्छ गुणनखंड gcd(a, N) आउटपुट करें और समाप्त करें"]
C -- "No" --> E["क्वांटम एल्गोरिथ्म के साथ f(x) = a^x mod N की अवधि r खोजें"]
E --> F{"क्या r सम है और a^(r/2) ≢ -1 mod N ?"}
F -- "No" --> B
F -- "Yes" --> G["गुणनखंड p = gcd(a^(r/2) - 1, N), q = gcd(a^(r/2) + 1, N) की गणना करें"]
G --> H["आउटपुट: p, q"]&lt;/div>
&lt;h2 id="अभजय-गणनखडन-क-अवध-खजन-क-समसय-period-finding-problem-म-बदलन">अभाज्य गुणनखंडन को अवधि खोजने की समस्या (Period Finding Problem) में बदलना
&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$ (वह संख्या जिसका अभाज्य गुणनखंडन किया जाना है) और एक सह-अभाज्य (coprime) पूर्णांक $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;$N$ के मापांक में $a$ का क्रम (Order)&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)$ के साथ कोई सार्व भाजक (common divisor) है (बशर्ते कि शर्त $a^{r/2} \not\equiv -1 \pmod N$ संतुष्ट हो)। इसलिए, यूक्लिडियन एल्गोरिथ्म (Euclidean algorithm) का उपयोग करके,&lt;/p>
$$ p = \gcd(a^{r/2} - 1, N) $$
$$ q = \gcd(a^{r/2} + 1, N) $$
&lt;p>की गणना करके, हम $N$ के गैर-तुच्छ अभाज्य गुणनखंड (non-trivial prime factors) $p, q$ खोज सकते हैं। यह गणना (महत्तम समापवर्तक की गणना और यादृच्छिक संख्या का निर्माण) शास्त्रीय कंप्यूटरों पर बहुत तेजी से की जा सकती है। समस्या केवल इस बात पर केंद्रित हो जाती है कि &lt;strong>हम अवधि $r$ को तेजी से कैसे खोज सकते हैं&lt;/strong>। शास्त्रीय कंप्यूटरों के लिए, केवल इस अवधि $r$ को खोजने में ही घातांकीय समय लगता है। यहीं क्वांटम कंप्यूटर काम में आते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="4-कवटम-एलगरथम-भग-अवध-खजन-क-ततर">4. क्वांटम एल्गोरिथ्म भाग: अवधि खोजने का तंत्र
&lt;/h1>&lt;p>क्वांटम कंप्यूटर का उपयोग करके अवधि $r$ खोजने के लिए सबरूटीन में निम्नलिखित 4 चरण शामिल हैं:&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$) की समान संभावना वाली सुपरपोजिशन अवस्था (superposition state) बनाई जा सके।&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>क्वांटम समानांतरता (quantum parallelism)&lt;/strong> का शक्तिशाली स्रोत है।&lt;/p>
&lt;h2 id="चरण-2-ओरकल-फकशन-मडयलर-एकसपनटएशन-लग-करन">चरण 2: ओरेकल फ़ंक्शन (मॉड्यूलर एक्सपोनेंटिएशन) लागू करना
&lt;/h2>&lt;p>इसके बाद, हम फ़ंक्शन $f(x) = a^x \bmod N$ की गणना करने के लिए क्वांटम ऑपरेशन सर्किट $U_f$ का उपयोग करते हैं और परिणाम को दूसरे रजिस्टर में संग्रहीत करते हैं।&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>क्वांटम एंटैंगलमेंट (quantum entanglement)&lt;/strong> की अवस्था में होते हैं। यदि हम (काल्पनिक रूप से) दूसरे रजिस्टर का अवलोकन करते हैं और एक विशिष्ट मान $k = a^{x_0} \bmod N$ प्राप्त करते हैं, तो पहले रजिस्टर की अवस्था उस $x$ की सुपरपोजिशन अवस्था में ढह जाएगी जो वह मान $k$ देता है। चूंकि फ़ंक्शन की अवधि $r$ है, शेष अवस्थाएं $x_0, x_0+r, x_0+2r, \dots$ जैसे मानों के $r$ छलांग पर होंगी।&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$ को सीधे मापना असंभव है। इसलिए, हम क्वांटम फूरियर ट्रांसफॉर्म (Quantum Fourier Transform) का उपयोग करते हैं।&lt;/p>
&lt;h2 id="चरण-3-कवटम-फरयर-टरसफरम-qft-क-मधयम-स-चरण-हसतकषप">चरण 3: क्वांटम फूरियर ट्रांसफॉर्म (QFT) के माध्यम से चरण हस्तक्षेप
&lt;/h2>&lt;p>हम पहले रजिस्टर पर &lt;strong>क्वांटम फूरियर ट्रांसफॉर्म (QFT)&lt;/strong> लागू करते हैं। QFT शास्त्रीय असतत फूरियर ट्रांसफॉर्म (discrete Fourier transform) का क्वांटम संस्करण है, जो अवस्था वेक्टर के आयाम (amplitude) को परिवर्तित करता है। आधार अवस्था (basis state) $|x\rangle$ पर QFT की क्रिया को इस प्रकार परिभाषित किया गया है:&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 लागू किया जाता है, तो अवस्थाओं के आयाम में हस्तक्षेप (interference) होता है। गणितीय विवरण को छोड़ते हुए, जब अवधि $r$ वाली अवस्था पर QFT लागू किया जाता है, तो तरंगों में &lt;strong>रचनात्मक हस्तक्षेप (Constructive Interference)&lt;/strong> केवल तभी होता है जब $y$ का मान $Q/r$ के पूर्णांक गुणज के बहुत करीब होता है। अन्य अवस्थाओं के लिए, संभावना आयाम (probability amplitude) &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>प्राप्त परिमेय संख्या $y/Q$ पर शास्त्रीय एल्गोरिथ्म &lt;strong>निरंतर भिन्न विस्तार (Continued Fraction Expansion)&lt;/strong> लागू करके, हम सन्निकट भिन्न (approximate fraction) $c/r$ की गणना करते हैं और हर (denominator) से अवधि $r$ निकालते हैं।&lt;/p>
&lt;hr>
&lt;h1 id="5-python-और-qiskit-क-उपयग-करक-समलशन-करयनवयन">5. Python और Qiskit का उपयोग करके सिमुलेशन कार्यान्वयन
&lt;/h1>&lt;p>चूंकि केवल सिद्धांत से इसे समझना मुश्किल है, आइए वास्तव में Python और IBM के क्वांटम कंप्यूटिंग फ्रेमवर्क &lt;strong>Qiskit&lt;/strong> का उपयोग करके शोर के एल्गोरिथ्म का सिमुलेशन करें।&lt;/p>
&lt;p>यहाँ, हम सबसे क्लासिक और प्रसिद्ध परिदृश्य को लागू करेंगे: &lt;strong>&amp;quot;$a=7$ का उपयोग करके $N=15$ का अभाज्य गुणनखंडन करना।&amp;quot;&lt;/strong>&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="python-करयनवयन-कड-क-अवलकन">Python कार्यान्वयन कोड का अवलोकन
&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;विशिष्ट &amp;#39;a&amp;#39; और &amp;#39;power&amp;#39; के लिए नियंत्रित U गेट बनाता है (केवल 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"># a=7 होने पर 7^x mod 15 के लिए हार्डकोडेड लॉजिक&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"># लक्ष्य रजिस्टर 0 से 15 तक दर्शाने के लिए 4 बिट्स का उपयोग करता है&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"># नवीनतम Qiskit में transpile की अनुशंसा की जाती है&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"># शास्त्रीय पोस्ट-प्रोसेसिंग: निरंतर भिन्न विस्तार (Continued fractions) का उपयोग करके अवधि 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"># फेज़ (Phase) = मापा गया मान / 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"># निरंतर भिन्न विस्तार के माध्यम से सन्निकट भिन्न प्राप्त करें। हर (denominator) की ऊपरी सीमा 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$ से विभाजित किया जाता है, तो चरण (phase) $y/Q$ क्रमशः $0.0$, $0.25$, $0.5$, और $0.75$ हो जाते हैं।
जब इन चरणों को निरंतर भिन्न (continued fraction) के रूप में विस्तारित किया जाता है:&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$) प्राप्त होता है, तो हर (denominator) $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;लॉजिकल क्विबिट (logical qubit)&amp;rdquo; बनाने के लिए, सरफेस कोड (Surface Code) आदि के माध्यम से हजारों &amp;ldquo;फिजिकल क्विबिट्स (physical qubits)&amp;rdquo; को एन्कोड करना आवश्यक है।&lt;/p>
&lt;p>अनुमान है कि 2048-बिट RSA एन्क्रिप्शन को तोड़ने के लिए हजारों पूर्ण लॉजिकल क्विबिट्स की आवश्यकता होगी, और इसे प्राप्त करने के लिए &lt;strong>लाखों से करोड़ों फिजिकल क्विबिट्स&lt;/strong> से सुसज्जित एक फॉल्ट-टॉलरेंट (दोष-सहिष्णु) क्वांटम कंप्यूटर की आवश्यकता होगी। यहाँ तक कि आज के सबसे उन्नत क्वांटम प्रोसेसर में भी केवल कुछ सौ से कुछ हज़ार फिजिकल क्विबिट्स हैं, इसलिए दुनिया की एन्क्रिप्शन व्यवस्था तुरंत नहीं टूटेगी।&lt;/p>
&lt;blockquote>
&lt;p>[!WARNING]
हालाँकि, &amp;ldquo;Store Now, Decrypt Later (अभी सहेजें, बाद में डिक्रिप्ट करें)&amp;rdquo; नामक एक खतरे का मॉडल (threat model) मौजूद है। हमलावर वर्तमान में एन्क्रिप्टेड गोपनीय संचार डेटा को बड़ी मात्रा में सहेज सकते हैं, और 10 से 20 साल बाद एक शक्तिशाली क्वांटम कंप्यूटर पूरा होने के तुरंत बाद उन सभी को डिक्रिप्ट करने की रणनीति अपना सकते हैं।&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h1 id="7-पसट-कवटम-करपटगरफ-pqc-म-सथनतरण">7. पोस्ट-क्वांटम क्रिप्टोग्राफी (PQC) में स्थानांतरण
&lt;/h1>&lt;p>ऐसे &amp;ldquo;Q-Day (वह दिन जब क्वांटम कंप्यूटर एन्क्रिप्शन को तोड़ेंगे)&amp;rdquo; के आगमन की तैयारी में, अमेरिका के नेशनल इंस्टीट्यूट ऑफ स्टैंडर्ड्स एंड टेक्नोलॉजी (NIST) के नेतृत्व में, दुनिया भर के क्रिप्टोग्राफर &lt;strong>पोस्ट-क्वांटम क्रिप्टोग्राफी (Post-Quantum Cryptography, PQC)&lt;/strong> के लिए मानक विकसित कर रहे हैं।&lt;/p>
&lt;p>PQC नई गणितीय समस्याओं (जैसे कि जालक समस्याएँ (lattice problems), बहुभिन्नरूपी बहुपद समस्याएँ (multivariate polynomial problems), हैश फ़ंक्शन-आधारित आदि) पर आधारित है, जिनके बारे में गणितीय रूप से माना जाता है कि उन्हें शोर के एल्गोरिथ्म (या ग्रोवर के एल्गोरिथ्म) का उपयोग करके भी कुशलता से हल नहीं किया जा सकता है। &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; और &amp;ldquo;CRYSTALS-Dilithium&amp;rdquo; जैसे एल्गोरिथ्म को पहले ही मानक विनिर्देशों के रूप में चुना जा चुका है, और इन्हें धीरे-धीरे Apple के iMessage और विभिन्न वेब ब्राउज़र के संचार प्रोटोकॉल में पेश किया जा रहा है।&lt;/p>
&lt;p>IT इन्फ्रास्ट्रक्चर का प्रबंधन करने वाले इंजीनियरों के लिए, मौजूदा RSA और इलिप्टिक कर्व क्रिप्टोग्राफी (elliptic curve cryptography) से PQC में सिस्टमिक बदलाव करना, अर्थात् &amp;ldquo;क्रिप्टो-एजिलिटी (Crypto-agility: एन्क्रिप्शन विधियों को तेज़ी से बदलने की क्षमता)&amp;rdquo; को सिस्टम में शामिल करना, भविष्य का एक बड़ा मिशन होगा।&lt;/p>
&lt;hr>
&lt;h1 id="8-नषकरष">8. निष्कर्ष
&lt;/h1>&lt;p>इस लेख में, हमने शोर के एल्गोरिथ्म की सैद्धांतिक गणितीय पृष्ठभूमि से शुरुआत करके, क्वांटम फूरियर ट्रांसफॉर्म का उपयोग करके अवधि निष्कर्षण तंत्र, और अंततः Python और Qiskit का उपयोग करके विशिष्ट सिमुलेशन कोड तक, 10,000 वर्णों के पैमाने पर एक विस्तृत व्याख्या प्रदान की है।&lt;/p>
&lt;p>यह तथ्य कि क्वांटम यांत्रिकी के सूक्ष्म विश्व के भौतिक नियम, मैक्रोस्कोपिक सूचना विज्ञान के मूल (जैसे कम्प्यूटेशनल जटिलता सिद्धांत और क्रिप्टोग्राफी सिद्धांत) को पूरी तरह से पलट सकते हैं, विज्ञान के इतिहास में सबसे रोमांचक प्रतिमान बदलावों (paradigm shifts) में से एक है। हमें क्वांटम कंप्यूटिंग तकनीक के चल ক্রিম विकास और इसके खिलाफ बचाव करने वाली नई एन्क्रिप्शन तकनीकों के बीच लड़ाई पर नज़र रखनी चाहिए।&lt;/p>
&lt;p>हम आपको इस लेख में प्रस्तुत Python कोड को अपने स्वयं के वातावरण में निष्पादित करने के लिए प्रोत्साहित करते हैं, और क्वांटम अवस्था सुपरपोजिशन (superposition) और हस्तक्षेप (interference) द्वारा बनाए गए &amp;ldquo;कम्प्यूटेशनल जादू (magic of computation)&amp;rdquo; का अनुभव करते हैं।&lt;/p>
&lt;hr>
&lt;p>&lt;strong>संदर्भ (References)&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>