> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# primes

> يعيد جدولًا بعمود `prime` واحد يحتوي على أعداد أولية.

* `primes()` – يعيد جدولًا لا نهائيًا بعمود `prime` واحد (UInt64) يحتوي على أعداد أولية مرتبة ترتيبًا تصاعديًا، بدءًا من 2. استخدم `LIMIT` (واختياريًا `OFFSET`) لتقييد عدد الصفوف.

* `primes(N)` – يعيد جدولًا بعمود `prime` واحد (UInt64) يحتوي على أول `N` عددًا أوليًا، بدءًا من 2.

* `primes(N, M)` – يعيد جدولًا بعمود `prime` واحد (UInt64) يحتوي على `M` عددًا أوليًا، بدءًا من العدد الأولي ذي الفهرس `N` (بفهرسة تبدأ من 0).

* `primes(N, M, S)` – يعيد جدولًا بعمود `prime` واحد (UInt64) يحتوي على `M` عددًا أوليًا، بدءًا من العدد الأولي ذي الفهرس `N` (بفهرسة تبدأ من 0)، وبخطوة `S` وفق فهرس العدد الأولي. تتوافق الأعداد الأولية المعادة مع الفهارس `N, N + S, N + 2S, ..., N + (M - 1)S`. يجب أن تكون `S` `>= 1`.

هذا مشابه لجدول النظام [`system.primes`](/ar/reference/system-tables/primes).

الاستعلامات التالية متكافئة:

```sql theme={null}
SELECT * FROM primes(10);
SELECT * FROM primes(0, 10);
SELECT * FROM primes() LIMIT 10;
SELECT * FROM system.primes LIMIT 10;
SELECT * FROM system.primes WHERE prime IN (2, 3, 5, 7, 11, 13, 17, 19, 23, 29);
```

الاستعلامات التالية متكافئة أيضًا:

```sql theme={null}
SELECT * FROM primes(10, 10);
SELECT * FROM primes() LIMIT 10 OFFSET 10;
SELECT * FROM system.primes LIMIT 10 OFFSET 10;
```

<div id="examples">
  ### أمثلة
</div>

أول 10 أعداد أولية.

```sql theme={null}
SELECT * FROM primes(10);
```

```response theme={null}
  ┌─prime─┐
  │     2 │
  │     3 │
  │     5 │
  │     7 │
  │    11 │
  │    13 │
  │    17 │
  │    19 │
  │    23 │
  │    29 │
  └───────┘
```

أول عدد أولي أكبر من 1e15.

```sql theme={null}
SELECT prime FROM primes() WHERE prime > 1e15 LIMIT 1;
```

```response theme={null}
  ┌────────────prime─┐
  │ 1000000000000037 │ -- 1.00 quadrillion
  └──────────────────┘
```

حلّ قيدًا توافقيًا على الأعداد الأولية ضمن نطاق كبير جدًا: اعثر على أول عدد أولي `p >= 10^15` بحيث يكون باقي قسمة `p` على `65537` مساويًا لـ `1`.

```sql theme={null}
SELECT prime
FROM primes()
WHERE prime >= 1e15
  AND prime % 65537 = 1
LIMIT 1;
```

```response theme={null}
 ┌────────────prime─┐
 │ 1000000001218399 │ -- 1.00 quadrillion
 └──────────────────┘
```

الأعداد الأولية المرسينية السبعة الأولى.

```sql theme={null}
SELECT prime
FROM primes()
WHERE bitAnd(prime, prime + 1) = 0
LIMIT 7;
```

```response theme={null}
  ┌──prime─┐
  │      3 │
  │      7 │
  │     31 │
  │    127 │
  │   8191 │
  │ 131071 │
  │ 524287 │
  └────────┘
```

<div id="notes">
  ### ملاحظات
</div>

* أسرع الصيغ هي استعلامات النطاق البسيطة واستعلامات ترشيح النقاط التي تستخدم قيمة `step` الافتراضية (`1`)، على سبيل المثال، `primes(N)` أو `primes() LIMIT N`. تستخدم هذه الصيغ مولّدًا محسّنًا للأعداد الأولية لحساب أعداد أولية كبيرة جدًا بكفاءة.
* بالنسبة إلى المصادر غير المحدودة (`primes()` / `system.primes`)، يمكن تطبيق مرشّحات قيم بسيطة مثل `prime BETWEEN ...` أو `prime IN (...)` أو `prime = ...` أثناء التوليد لتقييد نطاقات القيم التي يجري البحث فيها. على سبيل المثال، يُنفَّذ الاستعلام التالي بشكل شبه فوري:

```sql theme={null}
SELECT sum(prime)
FROM primes()
WHERE prime BETWEEN 1e6 AND 1e6 + 100
   OR prime BETWEEN 1e12 AND 1e12 + 100
   OR prime BETWEEN 1e15 AND 1e15 + 100
   OR prime IN (9999999967, 9999999971, 9999999973)
   OR prime = 1000000000000037;
```

```response theme={null}
  ┌───────sum(prime)─┐
  │ 2004010006000641 │ -- 2.00 quadrillion
  └──────────────────┘

1 row in set. Elapsed: 0.090 sec. 
```

* لا ينطبق تحسين نطاق القيم هذا على دوال الجداول المقيّدة (`primes(N)`, `primes(offset, count[, step])`) مع `WHERE`، لأن هذه الصيغ تحدد جدولًا محدودًا وفق ترتيب الأعداد الأولية، ويجب تقييم عامل التصفية بعد إنشاء ذلك الجدول للحفاظ على الدلالات.
* قد يكون استخدام `offset` غير صفري و/أو `step` أكبر من 1 (`primes(offset, count)` / `primes(offset, count, step)`) أبطأ، لأنه قد يلزم داخليًا توليد أعداد أولية إضافية وتخطيها. إذا لم تكن بحاجة إلى `offset` أو `step`، فتجاهلهما.
