مولد الأعداد الأولية عبر الإنترنت
ما هو العدد الأولي؟
العدد الأولي هو عدد طبيعي أكبر من 1، لا يقبل القسمة إلا على الواحد وعلى نفسه. أصغر الأعداد الأولية هي 2، 3، 5، 7، 11، 13، 17، 19، 23، 29… العدد 2 هو العدد الأولي الزوجي الوحيد – جميع الأعداد الزوجية الأخرى تقبل القسمة على اثنين.
الأعداد مثل 4 (= 2 × 2)، 6 (= 2 × 3) أو 15 (= 3 × 5) ليست أعدادًا أولية – بل نسميها أعدادًا مركبة.
كيف يعمل المولد؟
لإدراج جميع الأعداد الأولية في نطاق معين، نستخدم غربال إراتوستينس – وهو أحد أقدم وأكثر الخوارزميات فعالية، والتي وصفها عالم الرياضيات اليوناني إراتوستينس القيرواني حوالي عام 240 قبل الميلاد.
تقوم الخوارزمية بحذف مضاعفات كل عدد أولي يتم العثور عليه تدريجيًا. وما يتبقى هو الأعداد الأولية. يتم الحساب بأكمله مباشرة في متصفحك – لا يتم إرسال أي بيانات إلى الخادم.
للاختيار العشوائي، يقوم المولد أولاً بإنشاء قائمة بجميع الأعداد الأولية في النطاق ثم يختار منها العدد المطلوب عشوائيًا باستخدام مولد آمن من الناحية التشفيرية (crypto.getRandomValues()).
مميزات المولد
- جميع الأعداد الأولية – يسرد كل عدد أولي في النطاق المحدد (10,000 كحد أقصى)
- اختيار عشوائي – يختار N عددًا أوليًا عشوائيًا من النطاق (مناسب للنطاقات الكبيرة)
- ترتيب – رتب النتائج تصاعديًا
- فاصل – اختر كيفية فصل الأرقام عند النسخ
- إعدادات مسبقة سريعة – النطاقات الأكثر شيوعًا بنقرة واحدة
أين تستخدم الأعداد الأولية؟
التشفير والأمن
تشكل الأعداد الأولية أساس التشفير الحديث. تعمل الخوارزميات مثل RSA على مبدأ أن حاصل ضرب عددين أوليين كبيرين سهل الحساب، لكن تحليلها إلى عواملها الأولية أمر صعب حسابيًا.
- تشفير RSA – يتم إنشاء المفاتيح من عددين أوليين كبيرين
- ديفي-هيلمان (Diffie-Hellman) – تبادل المفاتيح عبر وحدة عدد أولي
- دوال التجزئة (Hash functions) – الأعداد الأولية كثوابت سحرية (SHA, MD5)
الرياضيات والعلوم
- نظرية الأعداد – اللبنات الأساسية للأعداد الصحيحة
- حدسية غولدباخ – يمكن التعبير عن كل عدد زوجي > 2 كمجموع عددين أوليين (لم يتم إثباتها بعد)
- فرضية ريمان – إحدى مسائل هيلبرت، تتعلق بتوزيع الأعداد الأولية
استخدامات عملية
- جداول التجزئة (Hash tables) – حجم الجدول كعدد أولي يقلل من الاصطدامات
- مولدات الأعداد شبه العشوائية – التطابق الخطي مع معامل أولي
- الموسيقى والإيقاع – الإيقاعات المتعددة (polyrhythms) بأطوال دورات أولية
توزيع الأعداد الأولية
تتوزع الأعداد الأولية بشكل غير منتظم بين الأعداد الطبيعية، لكن كثافتها تتناقص مع زيادة النطاق. يصف هذا نظرية الأعداد الأولية: عدد الأعداد الأولية حتى N هو تقريبًا N / ln(N).
| النطاق | عدد الأعداد الأولية |
|---|---|
| 1–10 | 4 |
| 1–100 | 25 |
| 1–1 000 | 168 |
| 1–10 000 | 1 229 |
| 1–100 000 | 9 592 |
| 1–1 000 000 | 78 498 |
غربال إراتوستينس خطوة بخطوة
النطاق 2–30:
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
1. اختر 2، اشطب مضاعفاته: 4، 6، 8، 10، 12...
2. اختر 3، اشطب مضاعفاته: 9، 15، 21، 27...
3. اختر 5، اشطب مضاعفاته: 25...
4. √30 ≈ 5.5 → انتهى
الأعداد الأولية: 2، 3، 5، 7، 11، 13، 17، 19، 23، 29
غربال إراتوستينس في الكود
جافاسكريبت
function sieve(to) {
const composite = new Uint8Array(to + 1);
const primes = [];
for (let p = 2; p <= to; p++) {
if (composite[p]) continue;
primes.push(p);
for (let j = p * p; j <= to; j += p) composite[j] = 1;
}
return primes;
}
بايثون
def sieve(n):
composite = bytearray(n + 1)
primes = []
for p in range(2, n + 1):
if not composite[p]:
primes.append(p)
for j in range(p * p, n + 1, p):
composite[j] = 1
return primes