چنل پایتون | جنگو | برنامه نویسی وب سایت | HTML & CSS & JS
441 subscribers
295 photos
142 videos
41 files
212 links
ارتباط با مدیر:

@Amir_1234_ka
Download Telegram
Forwarded from $C# chanel$
using System; 
using System.Linq;

namespace Program;

public static class Program
{
public static void Main()
{

Console.WriteLine("Enter your name: ");
string name = Console.ReadLine();
Console.Clear();


Console.WriteLine("Enter your age: ");
string age = Console.ReadLine();
int Age = int.Parse(age);
Console.Clear();

Console.WriteLine($"Your name is {name}");
Console.WriteLine($"Your age is {age}");
// Console.WriteLine("press any key to continue...");

if (Age <= 18)
{
Console.WriteLine("Your a little");
}
else if (Age > 18)
{
Console.WriteLine("Your a dult");
}
else
{
Console.WriteLine("Error....");
}

}
}
3👍3
This media is not supported in your browser
VIEW IN TELEGRAM
آموزش خفن و بسیاررررر کاربردی داریم🤣💔
🤣5🔥1💔1
هم اکنون در حال ساخت چت بات😅
با ریکشن انرژی بدید❤️
8🔥3😍2❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
وقتی یک ssd جدید میزارم رو سیستم اما میسوزه🤦🏼🤦🏼😂😂
😁3🤣2
Forwarded from $C# chanel$
برنامه ای بنویسید که یک آرایه از کاربر دریافت کنه و میانگین عناصرشو حساب کنه:
using System;

class Program
{
static void Main()
{
Console.Write("تعداد عناصر آرایه را وارد کنید: ");
int size = int.Parse(Console.ReadLine());

int[] array = new int[size];

for (int i = 0; i < size; i++)
{
Console.Write("عنصر " + (i + 1) + " را وارد کنید: ");
array[i] = int.Parse(Console.ReadLine());
}

int sum = 0;
for (int i = 0; i < size; i++)
{
sum += array[i];
}

double average = (double)sum / size;
Console.WriteLine("میانگین عناصر آرایه: " + average);
}
}
7
Forwarded from $C# chanel$
تمرین
2👍2
Forwarded from $C# chanel$
```
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Test1;

namespace Test1
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter your number: ");
string Read = Console.ReadLine();
int input_number = int.Parse(Read);

switch (input_number)
{
case 4:
{
Console.WriteLine("Enter number 1: ");
int Number1 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 2: ");
int Number2 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 3: ");
int Number3 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 4: ");
int Number4 = int.Parse(Console.ReadLine());
Console.WriteLine($"Sum = {Number1 + Number2 + Number3 + Number4}");
break;
}
case 5:
{
Console.WriteLine("Enter number 1: ");
int Number1 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 2: ");
int Number2 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 3: ");
int Number3 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 4: ");
int Number4 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 5: ");
int Number5 = int.Parse(Console.ReadLine());
Console.WriteLine($"Sum = {Number1 + Number2 + Number3 + Number4 + Number5}");
break;
}
default:
{
Console.WriteLine("Enter number 1: ");
int Number1 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 2: ");
int Number2 = int.Parse(Console.ReadLine());
Console.WriteLine("Enter number 3: ");
int Number3 = int.Parse(Console.ReadLine());
Console.WriteLine($"Sum = {Number1 + Number2 + Number3}");
break;
}
}

}
}
}


```
👍42
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۱: مقدمه‌ای بر محاسبات کوانتومی

هدف این آموزش
در این مجموعه آموزشی، می‌خواهیم با اصول محاسبات کوانتومی و کاربرد الگوریتم‌های کوانتومی آشنا شویم. این آموزش از صفر شروع شده و تا اجرای الگوریتم‌های واقعی روی شبیه‌سازهای کوانتومی ادامه پیدا می‌کند. در این پارت، ابتدا مفاهیم پایه‌ای محاسبات کوانتومی و تفاوت آن با محاسبات کلاسیک را بررسی می‌کنیم.



محاسبات کلاسیک vs محاسبات کوانتومی
در دنیای کامپیوترهای کلاسیک، اطلاعات به صورت بیت (۰ یا ۱) ذخیره و پردازش می‌شوند. اما در محاسبات کوانتومی، اطلاعات به صورت کیوبیت (Qubit) ذخیره می‌شوند که می‌توانند ترکیبی از ۰ و ۱ باشند. این ویژگی به دلیل برهم‌نهی (Superposition) ایجاد می‌شود.

- بیت کلاسیک:
تنها می‌تواند یکی از دو حالت ۰ یا ۱ را داشته باشد.
مثال:

  بیت = ۰


- کیوبیت کوانتومی:
می‌تواند ترکیبی از هر دو حالت باشد (مثلاً ۳۰٪ حالت ۰ و ۷۰٪ حالت ۱).
حالت کیوبیت را به این شکل می‌نویسیم:

  |ψ⟩ = α|0⟩ + β|1⟩

که در آن:
- |0⟩: حالت ۰ کیوبیت
- |1⟩: حالت ۱ کیوبیت
- α و β: ضرایبی که احتمال هر حالت را نشان می‌دهند.



ویژگی‌های کلیدی محاسبات کوانتومی

1. برهم‌نهی (Superposition):
کیوبیت‌ها می‌توانند همزمان در چندین حالت باشند که باعث افزایش قدرت پردازش می‌شود.

2. درهم‌تنیدگی (Entanglement):
دو یا چند کیوبیت می‌توانند به هم وابسته باشند، به طوری که تغییر حالت یکی روی دیگری تأثیر می‌گذارد، حتی اگر فاصله زیادی بین آن‌ها باشد.

3. تداخل (Interference):
می‌توانیم با استفاده از تداخل، حالت‌های نامطلوب را حذف و حالت‌های مطلوب را تقویت کنیم.



نصب Qiskit
برای اجرای الگوریتم‌های کوانتومی، از فریم‌ورک Qiskit استفاده می‌کنیم که توسط IBM توسعه داده شده است.

گام ۱: نصب Qiskit در محیط پایتون
برای نصب، کافی است دستور زیر را در ترمینال وارد کنید:
pip install qiskit

گام ۲: نصب بسته‌های اضافی برای اجرای مدار روی شبیه‌ساز کوانتومی
pip install qiskit[visualization]



مثال عملی: ساخت یک کیوبیت در Qiskit

حالا که با مفهوم کیوبیت آشنا شدیم، بیایید اولین مدار کوانتومی خود را با Qiskit بسازیم و یک کیوبیت در حالت برهم‌نهی ایجاد کنیم.

from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram

# ایجاد یک مدار کوانتومی با یک کیوبیت و یک بیت کلاسیک
qc = QuantumCircuit(1, 1)

# افزودن گیت Hadamard برای ایجاد برهم‌نهی
qc.h(0)

# اندازه‌گیری کیوبیت
qc.measure(0, 0)

# اجرای مدار روی شبیه‌ساز
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()

# نمایش نتایج
counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)



توضیح کد
1. ایجاد مدار کوانتومی:
با QuantumCircuit(1, 1) یک مدار با یک کیوبیت و یک بیت کلاسیک ایجاد کردیم.

2. افزودن گیت Hadamard:
گیت Hadamard کیوبیت را به حالت برهم‌نهی می‌برد، یعنی کیوبیت همزمان ۰ و ۱ خواهد بود.

3. اندازه‌گیری:
کیوبیت را اندازه‌گیری کردیم و نتیجه را در بیت کلاسیک ذخیره کردیم.

4. اجرای مدار:
مدار را روی شبیه‌ساز qasm_simulator اجرا کردیم و نتیجه را به صورت شمارش مشاهده کردیم.



تمرین برای شما:
۱. کد بالا را اجرا کنید و نتایج را بررسی کنید.
۲. یک گیت X به مدار اضافه کنید و مشاهده کنید که نتیجه چگونه تغییر می‌کند.


پارت بعدی:
در پارت ۲، با انواع گیت‌های کوانتومی (X, Z, CNOT) و تأثیر آن‌ها روی کیوبیت‌ها آشنا می‌شویم.

ادامه دارد...

[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
👍41
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۲: آشنایی با گیت‌های کوانتومی

هدف پارت دوم
در این بخش، با گیت‌های پایه‌ای کوانتومی آشنا می‌شویم. گیت‌ها در محاسبات کوانتومی مانند عملگرها در محاسبات کلاسیک هستند و وظیفه تغییر وضعیت کیوبیت‌ها را بر عهده دارند. همچنین چند مثال عملی با استفاده از Qiskit خواهیم داشت.



انواع گیت‌های کوانتومی

1. گیت X (Pauli-X Gate)
گیت X مشابه عمل NOT در کامپیوترهای کلاسیک عمل می‌کند و حالت کیوبیت را از ۰ به ۱ و بالعکس تغییر می‌دهد.

- تأثیر گیت X:

     |0⟩ → |1⟩  
|1⟩ → |0⟩

مثال با Qiskit:

   from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram

qc = QuantumCircuit(1, 1)
qc.x(0) # اعمال گیت X روی کیوبیت ۰
qc.measure(0, 0) # اندازه‌گیری کیوبیت

simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()

counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)



2. گیت Z (Pauli-Z Gate)
گیت Z علامت حالت |1⟩ را معکوس می‌کند، اما روی حالت |0⟩ تأثیری ندارد.

- تأثیر گیت Z:

     |0⟩ → |0⟩  
|1⟩ → -|1⟩

مثال با Qiskit:

   qc = QuantumCircuit(1, 1)
qc.h(0) # ایجاد برهم‌نهی
qc.z(0) # اعمال گیت Z روی کیوبیت ۰
qc.measure(0, 0) # اندازه‌گیری کیوبیت

simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()

counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)



3. گیت Hadamard (H Gate)
گیت H کیوبیت را به حالت برهم‌نهی می‌برد. این گیت یکی از مهم‌ترین گیت‌ها در محاسبات کوانتومی است.

- تأثیر گیت H:

     |0⟩ → (|0⟩ + |1⟩) / √2  
|1⟩ → (|0⟩ - |1⟩) / √2

مثال با Qiskit:

   qc = QuantumCircuit(1, 1)
qc.h(0) # اعمال گیت H روی کیوبیت ۰
qc.measure(0, 0) # اندازه‌گیری کیوبیت

simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()

counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)



تمرین برای شما:
۱. ترکیب گیت‌های X، Z و H را روی یک کیوبیت امتحان کنید.
۲. نتایج را مشاهده و بررسی کنید که چگونه ترتیب گیت‌ها روی خروجی تأثیر می‌گذارد.

-

پارت بعدی:
در پارت ۳، با گیت‌های چند کیوبیتی (مانند گیت CNOT) و مفهوم درهم‌تنیدگی (Entanglement) آشنا خواهیم شد.

ادامه دارد...

[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
👍51
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۳: گیت‌های چند کیوبیتی و درهم‌تنیدگی

هدف پارت سوم
در این بخش، با گیت‌های چند کیوبیتی مانند CNOT آشنا می‌شویم و مفهوم مهم درهم‌تنیدگی (Entanglement) را بررسی می‌کنیم. درهم‌تنیدگی یکی از ویژگی‌های منحصربه‌فرد محاسبات کوانتومی است که در الگوریتم‌های پیشرفته نقش کلیدی دارد.



گیت CNOT (Controlled NOT)
گیت CNOT یک گیت دو کیوبیتی است که در آن یک کیوبیت به‌عنوان کنترل و دیگری به‌عنوان هدف عمل می‌کند. اگر کیوبیت کنترل در حالت |1⟩ باشد، گیت X روی کیوبیت هدف اعمال می‌شود؛ در غیر این صورت، تغییری روی کیوبیت هدف ایجاد نمی‌شود.

- تأثیر گیت CNOT:

  |00⟩ → |00⟩  
|01⟩ → |01⟩
|10⟩ → |11⟩
|11⟩ → |10⟩



ایجاد درهم‌تنیدگی با گیت CNOT و Hadamard
برای ایجاد درهم‌تنیدگی، ابتدا یک کیوبیت را با گیت Hadamard به حالت برهم‌نهی می‌بریم و سپس گیت CNOT را اعمال می‌کنیم. نتیجه، حالتی است که دو کیوبیت کاملاً به هم وابسته می‌شوند؛ به طوری که اندازه‌گیری یکی، حالت دیگری را نیز مشخص می‌کند.

مدار درهم‌تنیدگی در Qiskit:
from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram

# ایجاد مدار با دو کیوبیت و دو بیت کلاسیک
qc = QuantumCircuit(2, 2)

# اعمال گیت Hadamard روی کیوبیت اول
qc.h(0)

# اعمال گیت CNOT با کیوبیت ۰ به‌عنوان کنترل و کیوبیت ۱ به‌عنوان هدف
qc.cx(0, 1)

# اندازه‌گیری هر دو کیوبیت
qc.measure([0, 1], [0, 1])

# اجرای مدار روی شبیه‌ساز
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()

# نمایش نتایج
counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)



توضیح کد
1. ایجاد مدار:
مدار شامل دو کیوبیت و دو بیت کلاسیک است.

2. اعمال گیت Hadamard:
کیوبیت اول را به حالت برهم‌نهی می‌برد، بنابراین به طور همزمان در حالت‌های |0⟩ و |1⟩ قرار می‌گیرد.

3. اعمال گیت CNOT:
با استفاده از گیت CNOT، کیوبیت دوم را به کیوبیت اول وابسته می‌کنیم و در نتیجه درهم‌تنیدگی ایجاد می‌شود.

4. اندازه‌گیری:
هر دو کیوبیت را اندازه‌گیری کرده و نتایج را مشاهده می‌کنیم. در خروجی، مشاهده خواهید کرد که فقط حالاتی مانند 00 و 11 ظاهر می‌شوند؛ این به دلیل وابستگی کامل دو کیوبیت است.



تمرین برای شما:
۱. مدار را تغییر دهید و به‌جای گیت Hadamard روی کیوبیت اول، روی کیوبیت دوم اعمال کنید. آیا همچنان درهم‌تنیدگی ایجاد می‌شود؟
۲. به‌جای گیت CNOT، از گیت‌های دیگر مانند X و Z استفاده کنید و تأثیر آن را بررسی کنید.



پارت بعدی:
در پارت ۴، با الگوریتم دیوش-جوزا (Deutsch-Jozsa Algorithm) به‌عنوان اولین الگوریتم کوانتومی واقعی آشنا خواهیم شد.

ادامه دارد...

[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
👍61
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۴: الگوریتم دیوش-جوزا (Deutsch-Jozsa Algorithm)

هدف پارت چهارم
در این بخش، با اولین الگوریتم کوانتومی که برتری خود را نسبت به الگوریتم‌های کلاسیک نشان می‌دهد آشنا می‌شویم: الگوریتم دیوش-جوزا. این الگوریتم به‌خوبی اهمیت موازی‌سازی کوانتومی را نشان می‌دهد.



مقدمه‌ای بر الگوریتم دیوش-جوزا
فرض کنید تابعی داریم که ورودی n بیتی می‌گیرد و خروجی آن یا همیشه ۰ است یا دقیقاً به تعداد مساوی ۰ و ۱ برمی‌گرداند. هدف ما این است که تشخیص دهیم این تابع ثابت (Constant) یا متعادل (Balanced) است.

- در روش کلاسیک:
برای تشخیص این موضوع، در بدترین حالت باید تابع را روی نیمی از ورودی‌های ممکن اجرا کنیم.
اگر تابع دارای n بیت ورودی باشد، این به معنای اجرای تابع روی ۲^(n-1) ورودی است.

- در روش کوانتومی:
با استفاده از الگوریتم دیوش-جوزا می‌توان تنها با یک بار اجرا تشخیص داد که تابع ثابت یا متعادل است!



مراحل الگوریتم دیوش-جوزا
1. ایجاد حالت برهم‌نهی:
تمام ورودی‌های ممکن به تابع را به‌طور همزمان ایجاد می‌کنیم.
2. اعمال تابع f به حالت برهم‌نهی:
تابع کوانتومی را روی کیوبیت‌ها اعمال می‌کنیم.
3. اندازه‌گیری نتیجه:
نتیجه اندازه‌گیری به ما می‌گوید که تابع ثابت یا متعادل است.



مدار الگوریتم دیوش-جوزا در Qiskit
در اینجا یک پیاده‌سازی ساده از الگوریتم دیوش-جوزا برای یک تابع ۲ بیتی ارائه شده است.

from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram

# ایجاد مدار با ۳ کیوبیت و ۲ بیت کلاسیک
n = 2 # تعداد ورودی‌های تابع
qc = QuantumCircuit(n + 1, n)

# آماده‌سازی کیوبیت‌ها: ایجاد برهم‌نهی
qc.h(range(n)) # اعمال گیت H روی n کیوبیت اول
qc.x(n) # اعمال گیت X روی کیوبیت کمکی
qc.h(n) # اعمال گیت H روی کیوبیت کمکی

# اعمال تابع f (در اینجا یک تابع متعادل نمونه)
qc.cx(0, n) # گیت CNOT با کیوبیت ۰ به‌عنوان کنترل
qc.cx(1, n) # گیت CNOT با کیوبیت ۱ به‌عنوان کنترل

# اعمال گیت Hadamard مجدد
qc.h(range(n))

# اندازه‌گیری کیوبیت‌ها
qc.measure(range(n), range(n))

# اجرای مدار روی شبیه‌ساز
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()

# نمایش نتایج
counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)



توضیح کد
1. ایجاد مدار:
مدار شامل سه کیوبیت و دو بیت کلاسیک است.
2. آماده‌سازی کیوبیت‌ها:
گیت Hadamard روی کیوبیت‌های ورودی اعمال می‌شود تا تمام ورودی‌های ممکن به‌طور همزمان ایجاد شوند.
3. اعمال تابع f:
تابعی نمونه به‌عنوان یک تابع متعادل تعریف شده است که با استفاده از گیت‌های CNOT پیاده‌سازی می‌شود.
4. اندازه‌گیری:
پس از اعمال گیت Hadamard مجدد، نتیجه اندازه‌گیری به ما نشان می‌دهد که تابع متعادل است.



نتیجه اجرای کد
در این مثال، خروجی مدار نشان می‌دهد که تابع متعادل است، زیرا نتیجه اندازه‌گیری به‌صورت 11 خواهد بود. اگر نتیجه 00 بود، به این معنی بود که تابع ثابت است.



تمرین برای شما:
۱. تابعی ثابت تعریف کنید و ببینید آیا الگوریتم می‌تواند آن را تشخیص دهد.
۲. تعداد ورودی‌ها را افزایش دهید و تأثیر آن را روی مدار مشاهده کنید.



پارت بعدی:
در پارت ۵، با الگوریتم گراور (Grover's Algorithm) آشنا می‌شویم که برای جستجوی سریع در پایگاه داده‌های غیر مرتب استفاده می‌شود.

ادامه دارد...

[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
2👍2
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۵: الگوریتم گراور (Grover's Algorithm)

هدف پارت پنجم
در این بخش، با یکی از مهم‌ترین الگوریتم‌های کوانتومی به نام الگوریتم گراور آشنا می‌شویم. این الگوریتم یک روش بسیار کارآمد برای جستجو در یک پایگاه داده غیر مرتب است و از برتری کوانتومی نسبت به روش‌های کلاسیک بهره می‌برد.



مقدمه‌ای بر الگوریتم گراور
فرض کنید یک پایگاه داده غیر مرتب داریم و می‌خواهیم یک مقدار خاص را پیدا کنیم. در روش‌های کلاسیک، در بدترین حالت نیاز به جستجو در تمام ورودی‌ها داریم، یعنی O(N) عملیات.
اما الگوریتم گراور این کار را در حدود √N عملیات انجام می‌دهد!



ایده اصلی الگوریتم گراور
الگوریتم گراور به کمک مفهوم تقویت دامنه (Amplitude Amplification) عمل می‌کند. ایده به این صورت است که به‌طور پیوسته حالت‌های صحیح (که به دنبال آن‌ها هستیم) را تقویت کرده و حالت‌های نادرست را تضعیف می‌کند، تا در نهایت با احتمال بالایی بتوانیم حالت صحیح را با یک اندازه‌گیری پیدا کنیم.



مراحل الگوریتم گراور
1. ایجاد برهم‌نهی یکنواخت:
تمام حالت‌های ممکن را به‌طور همزمان ایجاد می‌کنیم.
2. اوراکل (Oracle):
تابعی را تعریف می‌کنیم که حالت هدف را مشخص می‌کند.
3. عملگر گراور:
به کمک گیت‌های خاص، دامنه حالت هدف را تقویت می‌کنیم.
4. اندازه‌گیری:
در نهایت، با اندازه‌گیری حالت تقویت‌شده را به دست می‌آوریم.



پیاده‌سازی الگوریتم گراور در Qiskit
در اینجا یک پیاده‌سازی ساده از الگوریتم گراور برای یک پایگاه داده کوچک با ۲ کیوبیت ارائه شده است.

from qiskit import QuantumCircuit, Aer, transpile, assemble, execute
from qiskit.visualization import plot_histogram

# ایجاد مدار با ۲ کیوبیت و ۲ بیت کلاسیک
n = 2 # تعداد کیوبیت‌ها
qc = QuantumCircuit(n, n)

# مرحله ۱: ایجاد برهم‌نهی یکنواخت
qc.h(range(n)) # اعمال گیت H روی تمام کیوبیت‌ها

# مرحله ۲: تعریف اوراکل (Oracle)
qc.cz(0, 1) # یک اوراکل ساده که حالت |11⟩ را هدف قرار می‌دهد

# مرحله ۳: اعمال گیت‌های گراور
qc.h(range(n))
qc.x(range(n))
qc.h(n-1)
qc.mcx([0], 1)
qc.h(n-1)
qc.x(range(n))
qc.h(range(n))

# اندازه‌گیری
qc.measure(range(n), range(n))

# اجرای مدار روی شبیه‌ساز
simulator = Aer.get_backend('qasm_simulator')
compiled_circuit = transpile(qc, simulator)
qobj = assemble(compiled_circuit)
result = simulator.run(qobj).result()

# نمایش نتایج
counts = result.get_counts()
print("Counts:", counts)
plot_histogram(counts)



توضیح کد
1. ایجاد برهم‌نهی یکنواخت:
با اعمال گیت‌های Hadamard، تمام حالت‌های ممکن برای دو کیوبیت ایجاد می‌شود.
2. اوراکل:
در این مثال، یک اوراکل ساده تعریف شده که حالت |11⟩ را به‌عنوان حالت هدف مشخص می‌کند.
3. عملگر گراور:
عملگر گراور با استفاده از گیت‌های Hadamard، X و Controlled-Z پیاده‌سازی شده است تا دامنه حالت هدف تقویت شود.
4. اندازه‌گیری:
در نهایت، اندازه‌گیری انجام شده و نتیجه مشاهده می‌شود.



نتیجه اجرای کد
در خروجی، مشاهده خواهید کرد که با احتمال بالایی حالت |11⟩ به دست می‌آید، که همان حالت هدف ماست.



تمرین برای شما:
۱. تعداد کیوبیت‌ها را افزایش دهید و بررسی کنید که آیا الگوریتم همچنان به درستی کار می‌کند.
۲. اوراکل را تغییر دهید تا حالت دیگری به‌عنوان هدف در نظر گرفته شود و تأثیر آن را روی نتایج مشاهده کنید.



پارت بعدی:
در پارت ۶، به بررسی الگوریتم شُر (Shor’s Algorithm) می‌پردازیم که برای فاکتورگیری اعداد بزرگ استفاده می‌شود و کاربرد مهمی در شکستن رمزنگاری‌های کلاسیک دارد.

ادامه دارد...

[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
3👍1
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۶: الگوریتم شُر (Shor’s Algorithm)

هدف پارت ششم
در این بخش، الگوریتم معروف شُر را بررسی می‌کنیم که در حوزه رمزنگاری اهمیت بالایی دارد. الگوریتم شُر به دلیل توانایی آن در فاکتورگیری اعداد صحیح بزرگ، می‌تواند بسیاری از سیستم‌های رمزنگاری مبتنی بر فاکتورگیری مانند RSA را درهم بشکند.



ایده اصلی الگوریتم شُر
هدف الگوریتم شُر این است که عدد N را به دو عدد اول فاکتورگیری کند. مثلاً برای عدد 15 به دنبال دو عدد 3 و 5 می‌گردیم.
- روش‌های کلاسیک مانند آزمون تقسیم برای اعداد بزرگ ناکارآمد هستند و زمان بسیار زیادی می‌برند.
- الگوریتم شُر با استفاده از خاصیت‌های کوانتومی مانند تحلیل فوریه کوانتومی (QFT) این کار را بسیار سریع‌تر انجام می‌دهد.



مراحل الگوریتم شُر
1. انتخاب یک عدد a که کوچک‌تر از N باشد و نسبت به N اول باشد (یعنی gcd(a, N) = 1).
2. پیدا کردن دوره تناوب r از تابع f(x) = a^x mod N به طوری که کوچک‌ترین عدد r برای آن a^r mod N = 1 باشد.
3. استفاده از r برای محاسبه فاکتورها: اگر r فرد باشد یا a^(r/2) mod N برابر 1 باشد، مراحل را تکرار می‌کنیم. در غیر این صورت، فاکتورها را به صورت gcd(a^(r/2) - 1, N) و gcd(a^(r/2) + 1, N) به دست می‌آوریم.



مثال ساده برای عدد 15
1. عدد a را برابر با 2 انتخاب می‌کنیم. چون gcd(2, 15) = 1 است، a و N نسبت اول هستند.
2. تابع f(x) = 2^x mod 15 را برای مقادیر مختلف x محاسبه می‌کنیم:
- 2^1 mod 15 = 2
- 2^2 mod 15 = 4
- 2^3 mod 15 = 8
- 2^4 mod 15 = 1
بنابراین، دوره تناوب r برابر با 4 است.
3. حالا فاکتورها را محاسبه می‌کنیم:
gcd(2^(4/2) - 1, 15) = gcd(3, 15) = 3
gcd(2^(4/2) + 1, 15) = gcd(5, 15) = 5
بنابراین فاکتورهای عدد 15 به دست آمدند: 3 و 5.



پیاده‌سازی در Qiskit
در اینجا از Qiskit استفاده می‌کنیم تا الگوریتم شُر را روی یک شبیه‌ساز اجرا کنیم.

from qiskit import Aer, execute
from qiskit.algorithms import Shor

N = 15 # عددی که می‌خواهیم فاکتورگیری کنیم
shor = Shor() # ایجاد نمونه الگوریتم شُر
backend = Aer.get_backend('qasm_simulator') # انتخاب شبیه‌ساز
result = shor.run(backend, N) # اجرای الگوریتم
print("Factors of", N, ":", result.factors) # نمایش نتیجه



توضیح کد
- ابتدا عدد N را تعریف می‌کنیم که همان عددی است که می‌خواهیم فاکتورگیری کنیم.
- با استفاده از کلاس Shor یک نمونه از الگوریتم شُر ایجاد می‌کنیم.
- الگوریتم روی شبیه‌ساز QASM اجرا شده و فاکتورها به‌صورت خروجی نمایش داده می‌شوند.



تمرین برای شما
1. الگوریتم شُر را برای اعداد 21 و 35 پیاده‌سازی کنید و نتایج را بررسی کنید.
2. توضیح دهید چرا الگوریتم شُر از نظر تئوری می‌تواند سیستم رمزنگاری RSA را بشکند.



پارت بعدی
در پارت 7 با مفهوم گیت‌های چندکیوبیتی و درهم‌تنیدگی (Entanglement) آشنا خواهیم شد.

ادامه دارد...

[برای یا گرفتن چیزای بیشتر اینجا کلیک کن]
3👍2
به copilot گفتم خودتو طراحی کن اینو داد😂😂
🤪5🤣2😁1🤩1
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۷: گیت‌های چندکیوبیتی و درهم‌تنیدگی (Entanglement)

هدف پارت هفتم
در این پارت، با گیت‌های چندکیوبیتی و مفهوم درهم‌تنیدگی آشنا می‌شویم. درهم‌تنیدگی یکی از ویژگی‌های منحصر به‌فرد سیستم‌های کوانتومی است که به‌طور گسترده‌ای در الگوریتم‌های کوانتومی مانند الگوریتم شُر و الگوریتم گریور استفاده می‌شود. این ویژگی به ما این امکان را می‌دهد که اطلاعات را به‌طور همزمان در چندین کیوبیت ذخیره کرده و پردازش کنیم.



درهم‌تنیدگی (Entanglement)
درهم‌تنیدگی به وضعیتی گفته می‌شود که در آن دو یا چند کیوبیت به‌گونه‌ای با یکدیگر ارتباط دارند که تغییر وضعیت یک کیوبیت به‌طور آنی وضعیت دیگر کیوبیت‌ها را تحت تأثیر قرار می‌دهد. این ویژگی باعث می‌شود که اطلاعات در سیستم‌های کوانتومی به‌طور بسیار کارآمدتر از سیستم‌های کلاسیک پردازش شوند.

برای درک بهتر این موضوع، بیایید یک نمونه ساده از درهم‌تنیدگی را بررسی کنیم.



گیت‌های چندکیوبیتی و درهم‌تنیدگی در Qiskit
یکی از ابزارهای اصلی برای ایجاد درهم‌تنیدگی در سیستم‌های کوانتومی استفاده از گیت CNOT (Controlled-NOT) است. این گیت دو کیوبیت را به‌گونه‌ای به هم متصل می‌کند که وضعیت یکی از کیوبیت‌ها (کیوبیت کنترل) می‌تواند وضعیت دیگری (کیوبیت هدف) را تغییر دهد.

در اینجا یک نمونه کد برای درهم‌تنیدگی دو کیوبیت با استفاده از گیت‌های کوانتومی آورده شده است:

from qiskit import QuantumCircuit, Aer, execute

# ایجاد یک مدار کوانتومی با 2 کیوبیت
qc = QuantumCircuit(2)

# قرار دادن گیت هادامارد روی کیوبیت اول (Q0)
qc.h(0)

# قرار دادن گیت CNOT (کنترل-هدف) با کیوبیت اول به عنوان کنترل و کیوبیت دوم به عنوان هدف
qc.cx(0, 1)

# اندازه‌گیری کیوبیت‌ها
qc.measure_all()

# شبیه‌سازی مدار
backend = Aer.get_backend('aer_simulator')
result = execute(qc, backend, shots=1024).result()

# نمایش نتایج
counts = result.get_counts(qc)
print(counts)



توضیح کد
1. ایجاد مدار کوانتومی:
ابتدا یک مدار کوانتومی با دو کیوبیت ساخته می‌شود.

2. گیت هادامارد (Hadamard):
گیت هادامارد را روی کیوبیت اول (Q0) اعمال می‌کنیم. این گیت وضعیت کیوبیت را از حالت پایه (|0⟩) به حالت سوپراپوزیشن تغییر می‌دهد، به‌طوری‌که احتمال پیدا شدن کیوبیت در حالت 0 یا 1 برابر است.

3. گیت CNOT:
گیت CNOT که یک گیت کنترل-هدف است، روی کیوبیت‌های Q0 (کنترل) و Q1 (هدف) اعمال می‌شود. این گیت وضعیت کیوبیت هدف (Q1) را فقط در صورتی تغییر می‌دهد که کیوبیت کنترل (Q0) در حالت 1 باشد.

4. اندازه‌گیری:
پس از ایجاد درهم‌تنیدگی بین کیوبیت‌ها، هر دو کیوبیت را اندازه‌گیری می‌کنیم.

5. شبیه‌سازی مدار:
مدار را با استفاده از شبیه‌ساز Qiskit اجرا کرده و نتایج اندازه‌گیری را مشاهده می‌کنیم.



نتیجه اجرای کد
اگر این کد را اجرا کنید، نتایج به‌صورت زیر خواهد بود:

{'00': 512, '11': 512}

این نشان‌دهنده آن است که کیوبیت‌ها در دو حالت درهم‌تنیده 00 یا 11 قرار دارند، و هر دو حالت با احتمال برابر مشاهده می‌شوند.



توضیح درهم‌تنیدگی
در این حالت، کیوبیت‌های Q0 و Q1 درهم‌تنیده هستند. این بدین معنی است که وضعیت یکی از کیوبیت‌ها به‌طور آنی وضعیت دیگری را تحت تأثیر قرار می‌دهد. حتی اگر این کیوبیت‌ها از هم فاصله زیادی داشته باشند، وضعیت آن‌ها همچنان به‌طور کوانتومی به‌هم مرتبط است.



تمرین برای شما:
1. یک مدار مشابه بسازید که در آن از گیت‌های مختلفی مانند گیت‌های Toffoli یا گیت‌های کنترل شده دیگر استفاده کنید.
2. تأثیر درهم‌تنیدگی در الگوریتم‌های مختلف کوانتومی را بررسی کرده و توضیح دهید که چگونه این ویژگی به بهبود عملکرد الگوریتم‌های کوانتومی کمک می‌کند.



پارت بعدی:
در پارت ۸، با الگوریتم گریور (Grover's Algorithm) آشنا خواهیم شد و نحوه استفاده از درهم‌تنیدگی و گیت‌های چندکیوبیتی را در جستجوهای کوانتومی بررسی خواهیم کرد.

ادامه دارد...

برای بیشتر یاد گرفتن اینجا کلیک کن
3👍1
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۸: آشنایی با گیت‌های چندکیوبیتی و entanglement

هدف پارت هشتم
در این بخش، با گیت‌های چندکیوبیتی و مفهوم entanglement (درهم‌تنیدگی) آشنا می‌شویم که یکی از ویژگی‌های اساسی محاسبات کوانتومی است. این مفاهیم نقش کلیدی در ایجاد و پیاده‌سازی الگوریتم‌های کوانتومی دارند.



گیت‌های چندکیوبیتی
گیت‌های چندکیوبیتی، برخلاف گیت‌های تک‌کیوبیتی که تنها روی یک کیوبیت اعمال می‌شوند، روی دو یا چند کیوبیت به صورت همزمان اثر می‌گذارند. این گیت‌ها امکان ایجاد ارتباط بین کیوبیت‌ها را فراهم کرده و پایه‌گذار مفهوم entanglement هستند.

گیت‌های رایج دوکیوبیتی
1. گیت CNOT (Controlled-NOT)
این گیت روی دو کیوبیت، به نام‌های کنترل و هدف، اعمال می‌شود. اگر مقدار کیوبیت کنترل برابر 1 باشد، عملگر NOT روی کیوبیت هدف اعمال می‌شود. جدول صحت این گیت به صورت زیر است:

ورودی | خروجی
00 → 00
01 → 01
10 → 11
11 → 10

2. گیت SWAP
این گیت مقدار دو کیوبیت را با هم جابجا می‌کند. اگر ورودی دو کیوبیت a و b باشد، خروجی آن به صورت b و a خواهد بود.



Entanglement (درهم‌تنیدگی)
درهم‌تنیدگی حالتی است که در آن کیوبیت‌ها به گونه‌ای به هم مرتبط می‌شوند که وضعیت یک کیوبیت به طور مستقیم با وضعیت کیوبیت دیگر وابسته است، حتی اگر فاصله زیادی بین آن‌ها وجود داشته باشد. این ویژگی یکی از تفاوت‌های اصلی بین محاسبات کلاسیک و کوانتومی است.

ایجاد درهم‌تنیدگی با استفاده از گیت هادامارد و CNOT
یک روش ساده برای ایجاد entanglement بین دو کیوبیت به صورت زیر است:
1. اعمال گیت هادامارد روی کیوبیت اول برای ایجاد حالت ابرموقعیت.
2. اعمال گیت CNOT با کیوبیت اول به عنوان کنترل و کیوبیت دوم به عنوان هدف.

این عملیات حالت entانگل شده زیر را ایجاد می‌کند:
|ψ⟩ = (1 / √2) (|00⟩ + |11⟩)

این بدان معناست که اگر کیوبیت اول را اندازه‌گیری کرده و مقدار آن 0 باشد، کیوبیت دوم نیز 0 خواهد بود و اگر کیوبیت اول برابر 1 باشد، کیوبیت دوم نیز 1 خواهد بود.



مثال از پیاده‌سازی entanglement در Qiskit
در ادامه، یک کد ساده برای ایجاد درهم‌تنیدگی بین دو کیوبیت را مشاهده می‌کنید:

from qiskit import QuantumCircuit, Aer, assemble
from qiskit.visualization import plot_histogram

# ایجاد مدار کوانتومی با 2 کیوبیت
qc = QuantumCircuit(2)

# اعمال گیت هادامارد روی کیوبیت اول
qc.h(0)

# اعمال گیت CNOT با کیوبیت 0 به عنوان کنترل و کیوبیت 1 به عنوان هدف
qc.cx(0, 1)

# اندازه‌گیری
qc.measure_all()

# اجرای مدار
backend = Aer.get_backend('qasm_simulator')
qobj = assemble(qc)
result = backend.run(qobj).result()
counts = result.get_counts()

# نمایش هیستوگرام نتایج
plot_histogram(counts)



توضیح کد
1. ابتدا یک مدار کوانتومی با دو کیوبیت تعریف شده است.
2. گیت هادامارد روی کیوبیت اول اعمال شده تا حالت ابرموقعیت ایجاد شود.
3. گیت CNOT روی دو کیوبیت اعمال شده تا entanglement ایجاد شود.
4. در نهایت، کیوبیت‌ها اندازه‌گیری شده و نتیجه اجرا به صورت هیستوگرام نمایش داده می‌شود.



نتیجه اجرای کد
خروجی به صورت یک هیستوگرام خواهد بود که نشان می‌دهد حالات 00 و 11 با احتمال مساوی ظاهر می‌شوند، در حالی که حالات 01 و 10 اصلاً دیده نمی‌شوند. این نشان‌دهنده ایجاد موفقیت‌آمیز درهم‌تنیدگی بین دو کیوبیت است.



پارت بعدی:
در پارت ۹، با الگوریتم دیچک (Deutsch Algorithm) آشنا خواهیم شد که یکی از اولین الگوریتم‌های کوانتومی است و نشان می‌دهد چگونه محاسبات کوانتومی می‌توانند از محاسبات کلاسیک سریع‌تر باشند.

ادامه دارد...

برای بیشتر یاد گرفتن اینجا کلیک کن
3👍1
Forwarded from Python3
آموزش الگوریتم‌های کوانتومی – پارت ۹: گیت‌های چندکیوبیتی و درهم‌تنیدگی (Entanglement)

هدف پارت نهم
در این پارت، به بررسی گیت‌های چندکیوبیتی و مفهوم درهم‌تنیدگی (Entanglement) می‌پردازیم که یکی از مهم‌ترین ویژگی‌های محاسبات کوانتومی است. درهم‌تنیدگی به ما این امکان را می‌دهد که با استفاده از گیت‌های خاص، حالت‌هایی ایجاد کنیم که بین چند کیوبیت به‌طور وابسته عمل می‌کنند.



گیت CNOT
یکی از مهم‌ترین گیت‌های دوکیوبیتی، گیت CNOT است که یک گیت کنترلی است. این گیت به این شکل عمل می‌کند:
- اگر کیوبیت کنترلی برابر با 0 باشد، کیوبیت هدف تغییر نمی‌کند.
- اگر کیوبیت کنترلی برابر با 1 باشد، کیوبیت هدف NOT می‌شود (حالتش برعکس می‌شود).

به زبان ساده:
CNOT |00⟩ = |00⟩  
CNOT |01⟩ = |01⟩
CNOT |10⟩ = |11⟩
CNOT |11⟩ = |10⟩



ایجاد درهم‌تنیدگی با گیت CNOT و H
حالا می‌خواهیم با استفاده از گیت هادامارد (H) و گیت CNOT یک حالت درهم‌تنیده ایجاد کنیم. حالت درهم‌تنیده معروف Bell به شکل زیر ساخته می‌شود:

1. ابتدا هر دو کیوبیت در حالت اولیه |0⟩ هستند.
2. یک گیت هادامارد روی کیوبیت اول اعمال می‌کنیم:
|ψ⟩ = H|0⟩ = 1/√2 * (|0⟩ + |1⟩)

3. سپس یک گیت CNOT روی هر دو کیوبیت اعمال می‌کنیم که کیوبیت اول به‌عنوان کنترلی عمل می‌کند:
|ψ⟩ = 1/√2 * (|00⟩ + |11⟩)

این حالت درهم‌تنیدگی کامل دو کیوبیت را نشان می‌دهد، به این معنی که اگر یکی از کیوبیت‌ها را اندازه‌گیری کنیم، کیوبیت دیگر نیز به‌طور آنی وضعیت متناظر را خواهد داشت.



مثال پیاده‌سازی در Qiskit
در اینجا، یک مدار ساده برای ایجاد حالت Bell را پیاده‌سازی می‌کنیم:

from qiskit import QuantumCircuit, Aer, execute

# ایجاد یک مدار کوانتومی با 2 کیوبیت و 2 کلاسیک
qc = QuantumCircuit(2, 2)

# اعمال گیت هادامارد روی کیوبیت 0
qc.h(0)

# اعمال گیت CNOT با کیوبیت 0 به‌عنوان کنترل و کیوبیت 1 به‌عنوان هدف
qc.cx(0, 1)

# اندازه‌گیری کیوبیت‌ها
qc.measure([0, 1], [0, 1])

# اجرای مدار روی شبیه‌ساز
backend = Aer.get_backend('qasm_simulator')
result = execute(qc, backend, shots=1000).result()

# نمایش نتیجه
counts = result.get_counts()
print("نتایج اندازه‌گیری:", counts)



توضیح کد
1. ایجاد مدار:
مدار شامل دو کیوبیت و دو بیت کلاسیک است که برای ذخیره نتایج اندازه‌گیری استفاده می‌شوند.
2. اعمال گیت هادامارد:
گیت هادامارد روی کیوبیت 0 اعمال شده و آن را در حالت سوپریپوزیشن قرار می‌دهد.
3. اعمال گیت CNOT:
این گیت کیوبیت 1 را با توجه به وضعیت کیوبیت 0 تغییر می‌دهد و حالت درهم‌تنیده ایجاد می‌کند.
4. اندازه‌گیری:
کیوبیت‌ها اندازه‌گیری شده و نتایج آن‌ها در بیت‌های کلاسیک ذخیره می‌شود.
5. نمایش نتیجه:
نتیجه شامل مقادیر اندازه‌گیری‌شده خواهد بود که به‌طور معمول شامل حالت‌های 00 و 11 است.



نتیجه اجرای کد
خروجی ممکن است به شکل زیر باشد:
نتایج اندازه‌گیری: {'00': 512, '11': 488}

این خروجی نشان می‌دهد که مدار کوانتومی به‌درستی حالت Bell را ایجاد کرده است.



تمرین برای شما:
1. مدار را به‌گونه‌ای تغییر دهید که به جای ایجاد حالت |00⟩ + |11⟩، حالت |01⟩ + |10⟩ ایجاد کند.
2. توضیح دهید که چگونه درهم‌تنیدگی در الگوریتم‌های کوانتومی مانند الگوریتم شُر و الگوریتم گروور استفاده می‌شود.



پارت بعدی:
در پارت ۱۰، به بررسی تحلیل فوریه کوانتومی (QFT) و کاربرد آن در الگوریتم‌های کوانتومی می‌پردازیم.

ادامه دارد...

برای بیشتر یاد گرفتن اینجا کلیک کن
4👍1