<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python on kenji.blog</title><link>http://kenji.blog/hi/categories/python/</link><description>Recent content in Python on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>hi</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 20:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/hi/categories/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Qiskit का उपयोग करके क्वांटम प्रोग्रामिंग का परिचय</title><link>http://kenji.blog/hi/p/qiskit-quantum-programming-intro/</link><pubDate>Fri, 11 Sep 2026 20:00:00 +0900</pubDate><guid>http://kenji.blog/hi/p/qiskit-quantum-programming-intro/</guid><description>&lt;img src="http://kenji.blog/p/qiskit-quantum-programming-intro/img/eyecatch.jpg" alt="Featured image of post Qiskit का उपयोग करके क्वांटम प्रोग्रामिंग का परिचय" />&lt;h2 id="1-परचय">1. परिचय
&lt;/h2>&lt;p>आधुनिक कंप्यूटर (शास्त्रीय कंप्यूटर) ने हमारे जीवन को नाटकीय रूप से बदल दिया है और अपनी उच्च गणना क्षमताओं के साथ समाज के हर पहलू का समर्थन करते हैं। हालांकि, कुछ विशिष्ट समस्याओं (जैसे, बहुत बड़ी संख्याओं का अभाज्य गुणनखंडन, जटिल आणविक संरचनाओं का सिमुलेशन, और अनुकूलन समस्याएं) के लिए, यह ज्ञात है कि वर्तमान के सबसे उन्नत सुपर कंप्यूटरों को भी ब्रह्मांड की आयु से अधिक समय की आवश्यकता होगी।&lt;/p>
&lt;p>इन &amp;ldquo;शास्त्रीय कंप्यूटरों की सीमाओं&amp;rdquo; को तोड़ने की क्षमता रखने वाले कंप्यूटर को &lt;strong>क्वांटम कंप्यूटर (Quantum Computer)&lt;/strong> कहा जाता है। क्वांटम यांत्रिकी के रहस्यमय गुणों (सुपरपोज़िशन और क्वांटम एंटैंगलमेंट) को कम्प्यूटेशनल संसाधनों के रूप में उपयोग करके, यह माना जाता है कि कुछ विशिष्ट समस्याओं को नाटकीय रूप से तेज किया जा सकता है।&lt;/p>
&lt;p>इस लेख में, हम IBM द्वारा प्रदान किए गए एक ओपन-सोर्स क्वांटम कंप्यूटिंग फ्रेमवर्क, &lt;strong>Qiskit (किस्किट)&lt;/strong> का उपयोग करके क्वांटम प्रोग्रामिंग की दुनिया में अपना पहला कदम रखेंगे। यह एक बहुत ही विस्तृत परिचयात्मक मार्गदर्शिका है जो भौतिकी और गणित की बुनियादी बातों से लेकर पायथन में कोड लिखने और एक सिम्युलेटर पर क्वांटम सर्किट चलाने तक की पूरी प्रक्रिया को कवर करती है।&lt;/p>
&lt;hr>
&lt;h2 id="2-कवटम-गणन-क-समरथन-करन-वल-भतक-और-गणत-क-बनयद-बत">2. क्वांटम गणना का समर्थन करने वाले भौतिकी और गणित की बुनियादी बातें
&lt;/h2>&lt;p>क्वांटम प्रोग्रामिंग को समझने के लिए, सबसे पहले क्वांटम यांत्रिकी की बुनियादी अवधारणाओं को समझना आवश्यक है। यहाँ हम तीन महत्वपूर्ण स्तंभों: क्वांटम बिट्स, सुपरपोज़िशन, और क्वांटम एंटैंगलमेंट की व्याख्या करेंगे।&lt;/p>
&lt;h3 id="21-शसतरय-बटस-और-कवटम-बटस-qubit">2.1 शास्त्रीय बिट्स और क्वांटम बिट्स (Qubit)
&lt;/h3>&lt;p>शास्त्रीय कंप्यूटरों की सूचना इकाई &amp;ldquo;बिट (Bit)&amp;rdquo; है। एक बिट हमेशा &lt;code>0&lt;/code> या &lt;code>1&lt;/code> की अवस्था में होता है।&lt;/p>
&lt;p>दूसरी ओर, क्वांटम कंप्यूटरों में सूचना की सबसे छोटी इकाई को &lt;strong>क्वांटम बिट (Qubit: Quantum bit)&lt;/strong> कहा जाता है। क्वांटम बिट्स न केवल &lt;code>0&lt;/code> और &lt;code>1&lt;/code> की अवस्था ले सकते हैं, बल्कि &lt;strong>इन दोनों अवस्थाओं को एक साथ बनाए रखना&lt;/strong> भी संभव है।&lt;/p>
&lt;p>गणितीय रूप से, क्वांटम बिट की अवस्था $|\psi\rangle$ को आधार अवस्थाओं $|0\rangle$ और $|1\rangle$ के रैखिक संयोजन (सुपरपोज़िशन) के रूप में व्यक्त किया जाता है।&lt;/p>
$$
|\psi\rangle = \alpha|0\rangle + \beta|1\rangle
$$
&lt;p>यहाँ, $\alpha$ और $\beta$ सम्मिश्र संख्याएँ हैं, जो क्रमशः अवस्था $|0\rangle$ और $|1\rangle$ को देखने के प्रायिकता आयामों को दर्शाती हैं। क्वांटम यांत्रिकी के मूल सिद्धांतों के आधार पर, प्रायिकताओं का योग 1 होना चाहिए, इसलिए निम्नलिखित सामान्यीकरण शर्त पूरी होती है:&lt;/p>
$$
|\alpha|^2 + |\beta|^2 = 1
$$
&lt;p>यानी, जब आप इस क्वांटम बिट को &amp;ldquo;मापते (observe)&amp;rdquo; हैं, तो $|0\rangle$ प्राप्त होने की प्रायिकता $|\alpha|^2$ है, और $|1\rangle$ प्राप्त होने की प्रायिकता $|\beta|^2$ है। शास्त्रीय बिट के साथ एक महत्वपूर्ण अंतर यह है कि मापने से पहले स्थिति केवल संभाव्य रूप से निर्धारित होती है।&lt;/p>
&lt;div class="mermaid">graph LR
A["शास्त्रीय बिट (Classical Bit)"] --> B["निश्चित अवस्था: 0 या 1"]
C["क्वांटम बिट (Qubit)"] --> D["सुपरपोज़िशन: 0 और 1 दोनों"]
D --> E["माप द्वारा अवस्था संभाव्य रूप से निर्धारित होती है"]&lt;/div>
&lt;h3 id="22-सपरपजशन-superposition">2.2 सुपरपोज़िशन (Superposition)
&lt;/h3>&lt;p>जैसा कि पहले उल्लेख किया गया है, उस अवस्था को जहाँ $|0\rangle$ और $|1\rangle$ अवस्थाएँ मिश्रित होती हैं, &lt;strong>सुपरपोज़िशन (Superposition)&lt;/strong> कहा जाता है।&lt;/p>
&lt;p>उदाहरण के लिए, यदि एक क्वांटम बिट पूरी तरह से समान सुपरपोज़िशन अवस्था में है, तो $\alpha = \frac{1}{\sqrt{2}}$ और $\beta = \frac{1}{\sqrt{2}}$ होगा।&lt;/p>
$$
|\psi\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle
$$
&lt;p>जब इस अवस्था को मापा जाता है, तो $|0\rangle$ और $|1\rangle$ दोनों को 50% की प्रायिकता के साथ देखा जाता है।
यदि आपके पास 2 क्वांटम बिट्स हैं, तो आप 4 अवस्थाओं: $|00\rangle, |01\rangle, |10\rangle, |11\rangle$ का एक सुपरपोज़िशन बना सकते हैं। यदि आपके पास $n$ क्वांटम बिट्स हैं, तो आप एक ही समय में $2^n$ अवस्थाओं को व्यक्त कर सकते हैं, जो क्वांटम कंप्यूटरों की समानांतर प्रसंस्करण शक्ति के स्रोतों में से एक है।&lt;/p>
&lt;h3 id="23-कवटम-एटगलमट-entanglement">2.3 क्वांटम एंटैंगलमेंट (Entanglement)
&lt;/h3>&lt;p>क्वांटम गणना में सबसे शक्तिशाली और रहस्यमय गुण &lt;strong>क्वांटम एंटैंगलमेंट (Entanglement)&lt;/strong> है। आइंस्टीन ने इस घटना को &amp;ldquo;दूरी पर डरावनी कार्रवाई (spooky action at a distance)&amp;rdquo; कहा था। यह एक ऐसी संपत्ति है जहाँ दो या दो से अधिक क्वांटम बिट्स एक-दूसरे से मजबूती से जुड़े होते हैं, और एक बार जब एक क्वांटम बिट की अवस्था निर्धारित हो जाती है, तो दूसरे क्वांटम बिट की अवस्था तुरंत निर्धारित हो जाती है, भले ही वे भौतिक रूप से कितनी भी दूर हों।&lt;/p>
&lt;p>सबसे प्रसिद्ध क्वांटम एंटैंगलमेंट अवस्थाओं में से एक &amp;ldquo;बेल अवस्था (Bell State)&amp;rdquo; $\Phi^+$ अवस्था है, जिसे इस प्रकार व्यक्त किया जाता है:&lt;/p>
$$
|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}
$$
&lt;p>इस अवस्था में, $|01\rangle$ और $|10\rangle$ अवस्थाएँ मौजूद नहीं हैं। इसलिए, यदि पहले क्वांटम बिट को मापा जाता है और वह $|0\rangle$ है, तो निश्चित रूप से यह निर्धारित होता है कि दूसरा भी $|0\rangle$ है, बिना दूसरे क्वांटम बिट को मापने की आवश्यकता के। इसके विपरीत, यदि पहला $|1\rangle$ है, तो दूसरा भी हमेशा $|1\rangle$ होगा।&lt;/p>
&lt;hr>
&lt;h2 id="3-कवटम-लजक-गटस-quantum-logic-gates">3. क्वांटम लॉजिक गेट्स (Quantum Logic Gates)
&lt;/h2>&lt;p>जिस तरह शास्त्रीय कंप्यूटर गणना करने के लिए AND, OR, और NOT जैसे लॉजिक गेट्स का उपयोग करते हैं, उसी तरह क्वांटम कंप्यूटर क्वांटम बिट्स की अवस्थाओं में हेरफेर करने के लिए &lt;strong>क्वांटम गेट्स&lt;/strong> का उपयोग करते हैं। चूंकि क्वांटम अवस्थाएँ वैक्टर हैं, इसलिए क्वांटम गेट्स को उन वैक्टरों पर काम करने वाले &amp;ldquo;यूनिटरी मैट्रिसेस (Unitary Matrices)&amp;rdquo; के रूप में दर्शाया जाता है।&lt;/p>
&lt;h3 id="31-पउल-गटस-pauli-x-y-z">3.1 पाउली गेट्स (Pauli-X, Y, Z)
&lt;/h3>&lt;p>पाउली गेट्स एक क्वांटम बिट पर बुनियादी संचालन हैं।&lt;/p>
&lt;p>&lt;strong>・Pauli-X गेट (NOT गेट)&lt;/strong>
यह शास्त्रीय NOT गेट के बराबर है। यह $|0\rangle$ को $|1\rangle$ में और $|1\rangle$ को $|0\rangle$ में उलट देता है। (बलोच क्षेत्र में X अक्ष के चारों ओर 180-डिग्री का घुमाव)&lt;/p>
$$
X = \begin{pmatrix} 0 &amp; 1 \\ 1 &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Pauli-Y गेट&lt;/strong>
यह Y अक्ष के चारों ओर 180-डिग्री का घुमाव करता है। इसका प्रभाव चरण (Phase) और बिट दोनों को उलटने में होता है।&lt;/p>
$$
Y = \begin{pmatrix} 0 &amp; -i \\ i &amp; 0 \end{pmatrix}
$$
&lt;p>&lt;strong>・Pauli-Z गेट (फेज फ्लिप गेट)&lt;/strong>
यह $|0\rangle$ की अवस्था को अपरिवर्तित छोड़ देता है और $|1\rangle$ अवस्था के चरण को उलट देता है ($-1$ से गुणा करता है)। (Z अक्ष के चारों ओर 180-डिग्री का घुमाव)&lt;/p>
$$
Z = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; -1 \end{pmatrix}
$$
&lt;h3 id="32-हडमरड-गट-hadamard-gate">3.2 हैडामार्ड गेट (Hadamard Gate)
&lt;/h3>&lt;p>हैडामार्ड गेट (H गेट) एक बहुत ही महत्वपूर्ण गेट है जो एक निश्चित अवस्था ($|0\rangle$ या $|1\rangle$) को एक सुपरपोज़िशन अवस्था में परिवर्तित करता है।&lt;/p>
$$
H = \frac{1}{\sqrt{2}}
\begin{pmatrix}
1 &amp; 1 \\
1 &amp; -1
\end{pmatrix}
$$
&lt;p>जब H गेट को $|0\rangle$ पर लागू किया जाता है, तो यह एक समान सुपरपोज़िशन अवस्था $|+\rangle$ बन जाता है।&lt;/p>
$$
H|0\rangle = \frac{1}{\sqrt{2}}|0\rangle + \frac{1}{\sqrt{2}}|1\rangle = |+\rangle
$$
&lt;h3 id="33-फज-गटस-phase-gates">3.3 फेज गेट्स (Phase Gates)
&lt;/h3>&lt;p>फेज गेट Z गेट का एक सामान्यीकरण है, जो $|1\rangle$ अवस्था के चरण को एक निर्दिष्ट कोण $\theta$ से घुमाता है।&lt;/p>
$$
P(\theta) = \begin{pmatrix} 1 &amp; 0 \\ 0 &amp; e^{i\theta} \end{pmatrix}
$$
&lt;p>विशिष्ट उदाहरणों में S गेट ($\theta = \pi/2$) और T गेट ($\theta = \pi/4$) शामिल हैं।&lt;/p>
&lt;h3 id="34-cnot-गट-controlled-not-gate">3.4 CNOT गेट (Controlled-NOT Gate)
&lt;/h3>&lt;p>CNOT गेट (CX गेट) एक ऐसा गेट है जो दो क्वांटम बिट्स के बीच काम करता है और क्वांटम एंटैंगलमेंट उत्पन्न करने के लिए आवश्यक है। इसमें एक &amp;ldquo;कंट्रोल (Control) बिट&amp;rdquo; और एक &amp;ldquo;टारगेट (Target) बिट&amp;rdquo; होता है।&lt;/p>
&lt;p>केवल यदि कंट्रोल बिट $|1\rangle$ है, तो X गेट (NOT ऑपरेशन) टारगेट बिट पर लागू होता है; यदि कंट्रोल बिट $|0\rangle$ है, तो यह कुछ नहीं करता है।&lt;/p>
$$
CNOT = \begin{pmatrix}
1 &amp; 0 &amp; 0 &amp; 0 \\
0 &amp; 1 &amp; 0 &amp; 0 \\
0 &amp; 0 &amp; 0 &amp; 1 \\
0 &amp; 0 &amp; 1 &amp; 0
\end{pmatrix}
$$
&lt;hr>
&lt;h2 id="4-qiskit-क-मल-बत-और-परयवरण-सटअप">4. Qiskit की मूल बातें और पर्यावरण सेटअप
&lt;/h2>&lt;p>अब हम वास्तविक क्वांटम प्रोग्राम लिखने के लिए पायथन और Qiskit का उपयोग करेंगे।&lt;/p>
&lt;h3 id="41-qiskit-कय-ह">4.1 Qiskit क्या है?
&lt;/h3>&lt;p>&lt;strong>Qiskit&lt;/strong> एक ओपन-सोर्स क्वांटम कंप्यूटिंग सॉफ्टवेयर डेवलपमेंट किट (SDK) है जिसे IBM Quantum द्वारा विकसित किया गया है। यह आपको सहज रूप से क्वांटम सर्किट बनाने के लिए पायथन का उपयोग करने की अनुमति देता है, और उन्हें स्थानीय सिमुलेटर पर या वास्तविक IBM क्वांटम कंप्यूटरों पर क्लाउड के माध्यम से निष्पादित करने की अनुमति देता है।&lt;/p>
&lt;h3 id="42-सथपत-करन-क-वध">4.2 स्थापित करने की विधि
&lt;/h3>&lt;p>Qiskit का उपयोग करने के लिए, पायथन वातावरण की आवश्यकता होती है। आप निम्नलिखित कमांड से 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 qiskit-ibm-runtime matplotlib pylatexenc
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="43-परगरमग-क-मल-परवह">4.3 प्रोग्रामिंग का मूल प्रवाह
&lt;/h3>&lt;p>Qiskit का उपयोग करते हुए क्वांटम प्रोग्रामिंग मुख्य रूप से निम्नलिखित चरणों में आगे बढ़ती है:&lt;/p>
&lt;div class="mermaid">graph TD
A["1. सर्किट का निर्माण (Build)"] --> B["2. संकलन/ट्रांसपाइल (Compile)"]
B --> C["3. निष्पादन (Execute)"]
C --> D["4. परिणामों का विश्लेषण और विज़ुअलाइज़ेशन (Analyze)"]&lt;/div>
&lt;ol>
&lt;li>&lt;strong>सर्किट का निर्माण&lt;/strong>: एक &lt;code>QuantumCircuit&lt;/code> ऑब्जेक्ट बनाएं और गेट्स जोड़ें।&lt;/li>
&lt;li>&lt;strong>संकलन&lt;/strong>: निष्पादन के लिए बैकएंड (वास्तविक मशीन या सिम्युलेटर) से मेल खाने के लिए सर्किट को अनुकूलित करें।&lt;/li>
&lt;li>&lt;strong>निष्पादन&lt;/strong>: बैकएंड पर काम भेजें और परिणाम प्राप्त करें।&lt;/li>
&lt;li>&lt;strong>विश्लेषण&lt;/strong>: माप परिणामों के हिस्टोग्राम आदि प्लॉट करें।&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="5-अभयस-बल-सटट-कवटम-एटगलमट-बनन-क-लए-एक-सरकट-क-नरमण">5. अभ्यास: बेल स्टेट (क्वांटम एंटैंगलमेंट) बनाने के लिए एक सर्किट का निर्माण
&lt;/h2>&lt;p>आइए Qiskit का उपयोग करके उस &amp;ldquo;क्वांटम एंटैंगलमेंट (बेल स्टेट)&amp;rdquo; को बनाएं जिसे हमने सिद्धांत में सीखा था। लक्ष्य अवस्था $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$ है।&lt;/p>
&lt;h3 id="51-सरकट-क-डजइन">5.1 सर्किट का डिज़ाइन
&lt;/h3>&lt;p>बेल स्टेट बनाने के लिए, हम इन चरणों का पालन करते हैं:&lt;/p>
&lt;ol>
&lt;li>2 क्वांटम बिट्स तैयार करें (प्रारंभिक अवस्था दोनों के लिए $|0\rangle$ है)।&lt;/li>
&lt;li>इसे एक सुपरपोज़िशन अवस्था में रखने के लिए पहले क्वांटम बिट पर एक हैडामार्ड गेट (H) लागू करें।&lt;/li>
&lt;li>पहले क्वांटम बिट को &amp;ldquo;कंट्रोल बिट&amp;rdquo; और दूसरे क्वांटम बिट को &amp;ldquo;टारगेट बिट&amp;rdquo; के रूप में उपयोग करते हुए एक CNOT गेट लागू करें।&lt;/li>
&lt;li>परिणाम को पढ़ने के लिए माप (Measure) करें।&lt;/li>
&lt;/ol>
&lt;h3 id="52-pythonqiskit-कड-क-करयनवयन">5.2 Python/Qiskit कोड का कार्यान्वयन
&lt;/h3>&lt;p>आइए वास्तविक कोड देखें।&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;/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 class="p">,&lt;/span> &lt;span class="n">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_aer&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">Aer&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">import&lt;/span> &lt;span class="nn">matplotlib.pyplot&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">plt&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. सर्किट आरंभीकरण&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2 क्वांटम बिट्स और 2 शास्त्रीय बिट्स के साथ एक क्वांटम सर्किट बनाएं&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="mi">2&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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. H गेट लागू करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># क्वांटम बिट 0 (q0) पर हैडामार्ड गेट लागू करें&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="mi">0&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"># 3. CNOT गेट लागू करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># q0 को कंट्रोल बिट और q1 को टारगेट बिट के रूप में मानते हुए CNOT लागू करें&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">cx&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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. माप&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># क्वांटम बिट्स 0 और 1 को मापें, और उन्हें क्रमशः शास्त्रीय बिट्स 0 और 1 में लिखें&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="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 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>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># सर्किट आरेख ड्रा करें (matplotlib का उपयोग करके)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># qc.draw(&amp;#39;mpl&amp;#39;)&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="n">qc&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">draw&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;p>जब आप इस कोड को चलाते हैं, तो कंसोल पर ASCII आर्ट में निम्नलिखित क्वांटम सर्किट आरेख प्रदर्शित होगा:&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl"> ┌───┐ ┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_0: ┤ H ├──■──┤M├───
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘┌─┴─┐└╥┘┌─┐
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">q_1: ─────┤ X ├─╫─┤M├
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └───┘ ║ └╥┘
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">c: 2/═══════════╩══╩═
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> 0 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;code>H&lt;/code> हैडामार्ड गेट का प्रतिनिधित्व करता है, &lt;code>■&lt;/code> और &lt;code>X&lt;/code> का संयोजन CNOT गेट का प्रतिनिधित्व करता है, और &lt;code>M&lt;/code> माप का प्रतिनिधित्व करता है।&lt;/p>
&lt;h3 id="53-समयलटर-पर-नषपदन-और-परणम-क-वयखय">5.3 सिम्युलेटर पर निष्पादन और परिणामों की व्याख्या
&lt;/h3>&lt;p>इसके बाद, हम इस सर्किट को IBM के उच्च-प्रदर्शन सिम्युलेटर &lt;code>Aer&lt;/code> पर चलाएंगे और परिणामों की जांच करेंगे।&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;/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="c1"># Aer सिम्युलेटर का बैकएंड प्राप्त करें&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">simulator&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">Aer&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_backend&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;qasm_simulator&amp;#39;&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">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">simulator&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"># सर्किट चलाएं (यहाँ हम 1000 शॉट्स निष्पादित करते हैं)&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">simulator&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">1000&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">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>&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">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 class="n">compiled_circuit&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="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 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>&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="c1"># plot_histogram(counts)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># plt.show()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>परिणामों की व्याख्या&lt;/strong>&lt;/p>
&lt;p>कंसोल का आउटपुट कुछ इस तरह होना चाहिए:
&lt;code>माप परिणाम: {'00': 495, '11': 505}&lt;/code>
(※चूंकि प्रायिकताएं यादृच्छिक होती हैं, इसलिए हर बार निष्पादित होने पर संख्याएं थोड़ी बदल जाएंगी)&lt;/p>
&lt;p>एक आदर्श सिमुलेशन वातावरण में, &lt;code>00&lt;/code> और &lt;code>11&lt;/code> को लगभग 50% मापा जाएगा, और &lt;code>01&lt;/code> या &lt;code>10&lt;/code> को बिल्कुल नहीं देखा जाएगा।
यह ठीक उसी तरह है जैसा हमने जो बेल स्टेट $|\Phi^+\rangle = \frac{|00\rangle + |11\rangle}{\sqrt{2}}$ बनाया है, उसके सैद्धांतिक पूर्वानुमान के साथ पूरी तरह मेल खाता है। &amp;ldquo;क्वांटम एंटैंगलमेंट&amp;rdquo; जहां यदि पहला क्वांटम बिट 0 है, तो दूसरा भी 0 होना चाहिए, और यदि यह 1 है, तो यह 1 होना चाहिए, सटीक रूप से अनुकरण किया गया है।&lt;/p>
&lt;p>ध्यान दें कि यदि इसे वास्तविक क्वांटम कंप्यूटर (IBM Quantum Hardware) पर चलाया जाता है, तो शोर (क्वांटम डिकोहेरेंस और गेट त्रुटियों) के प्रभाव के कारण &lt;code>01&lt;/code> या &lt;code>10&lt;/code> को थोड़ा देखा जा सकता है। वर्तमान क्वांटम कंप्यूटर के विकास में सबसे बड़ी चुनौतियों में से एक इस शोर को कम करना है (क्वांटम त्रुटि सुधार)।&lt;/p>
&lt;hr>
&lt;h2 id="6-अधक-उननत-एलगरदम-म-सकल-अप-करन">6. अधिक उन्नत एल्गोरिदम में स्केल अप करना
&lt;/h2>&lt;p>बेल स्टेट का निर्माण क्वांटम प्रोग्रामिंग के &amp;ldquo;हैलो वर्ल्ड (Hello World)&amp;rdquo; जैसा है। इसे और विकसित करके, हम शक्तिशाली एल्गोरिदम बना सकते हैं जो शास्त्रीय कंप्यूटरों को पार करते हैं।&lt;/p>
&lt;h3 id="61-डयश-जसज-एलगरदम-deutsch-jozsa-algorithm">6.1 ड्यूश-जोस्ज़ा एल्गोरिदम (Deutsch-Jozsa Algorithm)
&lt;/h3>&lt;p>यह यह निर्धारित करने की समस्या है कि दिया गया फ़ंक्शन $f(x)$ &amp;ldquo;निरंतर फ़ंक्शन (इनपुट की परवाह किए बिना हमेशा 0 या हमेशा 1 आउटपुट करता है)&amp;rdquo; है या &amp;ldquo;संतुलित फ़ंक्शन (आधे इनपुट के लिए 0 और बाकी आधे के लिए 1 आउटपुट करता है)&amp;rdquo; है।
शास्त्रीय कंप्यूटरों को सबसे खराब स्थिति में फ़ंक्शन के $2^{n-1} + 1$ मूल्यांकन की आवश्यकता होती है, लेकिन ड्यूश-जोस्ज़ा एल्गोरिदम का उपयोग करके, आप क्वांटम समानांतरता का उपयोग करके &lt;strong>केवल 1 मूल्यांकन&lt;/strong> में इसे निर्धारित कर सकते हैं। यह क्वांटम एल्गोरिदम के मूल पैटर्न को दर्शाता है जो एक सुपरपोज़िशन अवस्था को इनपुट करता है, अनावश्यक अवस्थाओं को रद्द करने के लिए हस्तक्षेप (Interference) का उपयोग करता है, और वांछित उत्तर को बढ़ाता है।&lt;/p>
&lt;h3 id="62-गरवर-क-एलगरदम-grovers-algorithm">6.2 ग्रोवर का एल्गोरिदम (Grover&amp;rsquo;s Algorithm)
&lt;/h3>&lt;p>एक खोज समस्या में जहां $N$ बिना क्रमबद्ध डेटाबेस से विशिष्ट डेटा की खोज की जाती है, एक शास्त्रीय एल्गोरिदम को औसतन $N/2$ गणनाओं की आवश्यकता होती है, जबकि ग्रोवर का एल्गोरिदम $\sqrt{N}$ बार में लक्ष्य डेटा ढूंढ सकता है।
यह एल्गोरिदम लक्ष्य समाधान के चरण को पलटने के लिए &amp;ldquo;ओरेकल (Oracle)&amp;rdquo; नामक ब्लैक बॉक्स का उपयोग करता है, और &amp;ldquo;आयाम प्रवर्धन (Amplitude Amplification)&amp;rdquo; करके लक्ष्य समाधान को देखे जाने की प्रायिकता को नाटकीय रूप से बढ़ाता है।&lt;/p>
&lt;div class="mermaid">graph TD
A["आरंभीकरण (सभी अवस्थाओं का सुपरपोज़िशन)"] --> B["ओरेकल (सही उत्तर के चरण को पलटना)"]
B --> C["प्रसार ऑपरेटर (औसत के चारों ओर पलटने से आयाम प्रवर्धन)"]
C --> D{"क्या यह पर्याप्त प्रायिकता तक पहुंच गया है?"}
D -- "नहीं (No)" --> B
D -- "हाँ (Yes)" --> E["माप"]&lt;/div>
&lt;hr>
&lt;h2 id="7-नषकरष-और-भवषय-क-शकष">7. निष्कर्ष और भविष्य की शिक्षा
&lt;/h2>&lt;p>इस लेख में, हमने सुपरपोज़िशन और क्वांटम एंटैंगलमेंट जैसी क्वांटम कंप्यूटिंग की मौलिक अवधारणाओं से शुरू किया, और Qiskit का उपयोग करके क्वांटम लॉजिक गेट्स के संचालन को विस्तार से समझाया, और वास्तव में एक बेल स्टेट का निर्माण, अनुकरण, और परिणामों की व्याख्या की।&lt;/p>
&lt;p>चूंकि Qiskit को पायथन में लिखा जा सकता है, जो एक परिचित भाषा है, इसलिए यह एक शक्तिशाली उपकरण है जो आपको गणितीय और भौतिक बाधाओं को दूर करने और एल्गोरिदम के निर्माण पर ध्यान केंद्रित करने की अनुमति देता है। क्वांटम कंप्यूटर वर्तमान में शोर वाले मध्यवर्ती-स्तरीय क्वांटम उपकरणों (NISQ: Noisy Intermediate-Scale Quantum) के युग में हैं, लेकिन क्वांटम मशीन लर्निंग (Quantum Machine Learning), क्वांटम रसायन विज्ञान (Quantum Chemistry), और क्रिप्टोग्राफी जैसे कई क्षेत्रों में दुनिया भर में लागू अनुसंधान तेजी से आगे बढ़ रहा है।&lt;/p>
&lt;p>कृपया इस अवसर का लाभ उठाकर Qiskit का उपयोग करके विभिन्न क्वांटम सर्किट बनाएं और उन्हें वास्तविक IBM Quantum प्रोसेसर पर चलाएं। आपको अपने हाथों से भविष्य के कंप्यूटिंग प्रतिमान का अनुभव करने में सक्षम होना चाहिए।&lt;/p>
&lt;h3 id="सदरभ">संदर्भ
&lt;/h3>&lt;ul>
&lt;li>&lt;a class="link" href="https://qiskit.org/documentation/" target="_blank" rel="noopener"
>Qiskit आधिकारिक दस्तावेज़&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://qiskit.org/textbook/ja/preface.html" target="_blank" rel="noopener"
>Qiskit पाठ्यपुस्तक (Textbook)&lt;/a> - आधिकारिक पाठ्यपुस्तक जो उन लोगों के लिए अनुशंसित है जो गणितीय पृष्ठभूमि और एल्गोरिदम को अधिक गहराई से सीखना चाहते हैं&lt;/li>
&lt;li>IBM Quantum Learning&lt;/li>
&lt;/ul>
&lt;p>क्वांटम की दुनिया में आपका स्वागत है!&lt;/p></description></item><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>