خوارزمية العامل الرئيسي: C، Python مثال

⚡ ملخص ذكي

تقوم خوارزمية العامل الأولي بتحليل أي عدد صحيح موجب إلى حاصل ضرب أعداد أولية باستخدام القسمة التجريبية حتى الجذر التربيعي، أو نوع من غربال إراتوستينس الذي يخزن كل عامل أولي أصغر.

  • 🧮 فريف: العوامل الأولية للعدد الصحيح هي الأعداد الأولية التي يساوي حاصل ضربها العدد الصحيح؛ العدد 10 ينقسم إلى 2 و 5.
  • 🔁 قسم المحاكمات: يتم تنفيذ التكرار من 2 إلى جذر (ن) والقسمة كلما كان المعيار يساوي صفرًا في وقت O(جذر (ن)).
  • 🧰 طريقة الغربلة: يؤدي تخزين أصغر عامل أولي لكل قيمة حتى حد معين إلى تقليل عملية التحليل إلى حوالي O(log n) لكل استعلام.
  • 🐍 Python Code: تكراري وتكراري Python تقوم هذه التطبيقات بطباعة كل عامل أولي للعدد المدخل.
  • ؟؟؟؟ C Code: تُظهر برامج C التكرارية والتكرارية المتطابقة نفس المنطق باستخدام stdio ومصفوفة محسوبة مسبقًا.
  • 🔐 الاستعمالات: تُعزز عملية التحليل إلى العوامل الأولية عمليات التحقق من قابلية القسمة، وتبسيط الكسور، والمقامات المشتركة، والمفاتيح التشفيرية القائمة على الأرقام.

خوارزمية العامل الرئيسي

ما هو التخصيم الأولي؟

العامل الأولي للعدد هو عامل يكون هو نفسه عاملاً أولياً. رقم اولي، لا يقبل القسمة إلا على 1 وعلى نفسه.

على سبيل المثال: العوامل الأولية للعدد 10 هي 2 و 5، لأن 2 × 5 = 10.

إيجاد العوامل الأولية باستخدام التكرار

كرر العملية من 2 حتى جذر n وتحقق من قابلية القسمة. طالما أن n يقبل القسمة على العدد الحالي، اقسمه واطبعه.

على سبيل المثال: كل عدد أولي أكبر من 40 يناسب n2+n+41، لذا فإن n = 0، 1، 2 ينتج عنه 41، 43، 47.

كيفية طباعة العامل الرئيسي لعدد؟

  • قم بتكرار الأرقام من 2 إلى جذر (ن).
  • تحقق من باقي قسمة n على كل مرشح؛ الباقي الصفري يعني أن المرشح هو عامل أولي.
  • اجمع كل عدد أولي يقسم n.
  • يتم تنفيذ الروتين في تعقيد زمني قدره O(sqrt(n)).

الخوارزمية:

Set a counter i to 2
While i <= sqrt(n):
    While n % i == 0:
        n = n / i
        print i
    i = i + 1
if n > 1:
    print n

خوارزمية الغربال

تقوم طريقة الغربال بتخزين أصغر عامل أولي لكل عدد حتى حد أقصى، مما يقلل بشكل حاد من تكلفة التحليل بعد الحساب المسبق.

  • سجل أصغر عامل أولي لكل عدد صحيح حتى الحد الأقصى.
  • خذ أصغر عدد أولي وأضفه إلى مجموعة العوامل.
  • اقسم العدد على ذلك العدد الأولي وكرر العملية حتى يصل إلى 1.
  • يتم تنفيذ كل استعلام في حوالي O(log n).

على سبيل المثال: أي عدد أولي غير 2 و3 يمكن أن يأخذ الصيغة 6ن-1 أو 6ن+1. على سبيل المثال، 5 = 6(1)-1 و 19 = 6(3)+1.

الخوارزمية: تعريف مجموعة التي تخزن أصغر عامل أولي لكل عدد، باستخدام الفهرس كقيمة أولية لكل عنصر.

Set array[1] to 1
Set i to 2
While i*i <= max_number:
    If array[i] == i:
        Set j to i*i
        While j <= max_number:
            If array[j] == j:
                array[j] = i
            j = j + i
    i = i + 1
while the_number != 1:
    print array[the_number]
    the_number = the_number / array[the_number]

مقالات ذات صلة

Python العوامل الأولية باستخدام التكرار

ما يلي Python يجد الكود العوامل الأولية باستخدام طريقة القسمة التجريبية التكرارية:

import math
def PrimeFactors(n):
    for i in range(2, int(math.sqrt(n)) + 1, 1):
        while n % i == 0:  # find all the occurrences of a prime factor
            print((int)(i))
            n = n // i
    if n != 1:  # if the number was originally a prime
        print((int)(n))
n = (int)(input("Enter the number you want: "))
PrimeFactors(n)

الإخراج:

Enter the number you want: 4
2
2

Python العوامل الأولية باستخدام العودية

استخدم Python يستخدم الكود أدناه طريقة الغربال لإيجاد العوامل الأولية لعدد معين.

import math
High = (int)(1e5 + 7)
array = [0 for i in range(High)]

# generate smallest prime factors
def Sieve():
    for i in range(1, High):
        array[i] = i
    for i in range(2, math.ceil(math.sqrt(High))):
        if array[i] == i:
            for j in range(i * i, High, i):
                if array[j] == j:
                    array[j] = i

def PrimeFactors(n):  # divide until we reach 1
    if n == 1:
        return
    print((int)(array[n]))
    PrimeFactors((int)(n / array[n]))

Sieve()
n = (int)(input("Enter the number you want: "))
PrimeFactors(n)

الإخراج:

Enter the number you want: 4
2
2

برنامج العوامل الأولية C باستخدام التكرار

نفس الحل التكراري المكتوب في Cأدخل رقمًا، ثم لكل مرشح من 2 إلى جذر (ن)، تحقق من قابلية القسمة واطبع كل ظهور لعامل أولي.

#include <stdio.h>
int main()
{
    int n;
    printf("Enter the number you want: ");
    scanf("%d", &n);
    for (int i = 2; i * i <= n; i++)
    {
        while (n % i == 0)  // find all the occurrences of a prime factor
        {
            printf("%d\n", i);
            n /= i;
        }
    }
    if (n != 1)  // if the number was originally a prime
    {
        printf("%d", n);
    }
    return 0;
}

الإخراج:

Enter the number you want: 2
2

برنامج العوامل الأولية C باستخدام التكرار

برنامج العوامل الأولية C باستخدام التكرار

يعكس إصدار C التكراري Python أولاً: قم ببناء مصفوفة أصغر العوامل الأولية، ثم قم بتكرار عملية القسمة على هذا العامل حتى يصل n إلى 1.

#include <stdio.h>
int Max = 100007;
int array[100007];

void Sieve()  // smallest prime factors up to Max
{
    for (int i = 1; i < Max; i++)
        array[i] = i;
    for (int i = 2; i * i <= Max; i++)
    {
        if (array[i] == i)
        {
            for (int j = i * i; j < Max; j += i)
            {
                if (array[j] == j)
                    array[j] = i;
            }
        }
    }
}

void PrimeFactors(int n)
{
    if (n == 1)  // divide until we reach 1
        return;
    printf("%d\n", array[n]);
    PrimeFactors(n / array[n]);
}

int main()
{
    Sieve();
    int n;
    printf("Enter the number you want: ");
    scanf("%d", &n);
    PrimeFactors(n);
    return 0;
}

الإخراج:

Enter the number you want: 2
2

بعض الحقائق المثيرة للاهتمام حول الأعداد الأولية

  • يمكن كتابة أي عدد زوجي بخلاف 2 على أنه مجموع عددين أوليين (4 = 2 + 2، 6 = 3 + 3، 8 = 5 + 3).
  • لا توجد أعداد أولية متتالية غير 2 و 3، لأن 2 هو العدد الأولي الزوجي الوحيد.
  • كل الأعداد الأولية باستثناء 2 و 3 تتناسب مع الشكل 6n + 1 أو 6n − 1، حيث n عدد صحيح موجب.
  • مجموعة العوامل الأولية لعدد ما فريدة.
  • العدد 1 ليس عددًا أوليًا ولا عددًا مركبًا.
  • يساعد التحليل إلى العوامل الأولية في قابلية القسمة، وتبسيط الكسور، وإيجاد المقامات المشتركة.
  • كما أن التحليل إلى العوامل الأولية يدعم أيضاً رموز التشفير القائمة على الأرقام.

الأسئلة الشائعة

التحليل إلى العوامل الأولية يقسم العدد الصحيح إلى حاصل ضرب أعداد أولية، على سبيل المثال 12 = 2 × 2 × 3. العوامل الأولية فريدة لكل عدد صحيح أكبر من واحد.

إذا كان للعدد n عامل أكبر من جذر n، فإن نظيره يكون أصغر، وبالتالي يمكن إيجاده مسبقًا. أي عدد أكبر من جذر n يتكرر.

تستغرق عملية القسمة التجريبية O(sqrt(n)). يقوم الغربال بحساب أصغر العوامل الأولية مسبقًا في O(N log log N)، ثم يجيب على كل تحليل في حوالي O(log n).

استخدم الغربال عند تحليل العديد من الأعداد ضمن حد أعلى معروف. تتيح عملية حسابية مسبقة واحدة تشغيل كل استعلام لاحق في حوالي O(log n).

لا، العدد 1 ليس عددًا أوليًا ولا عددًا مركبًا، لذا لا يظهر أبدًا في قائمة العوامل الأولية. يستخدم التحليل إلى العوامل الأولية أعدادًا أولية أكبر من أو تساوي 2.

يؤدي تحليل الأعداد الأولية إلى اختبارات قابلية القسمة، وتبسيط الكسور، والمضاعف المشترك الأصغر والقاسم المشترك الأكبر، والتشفير بالمفتاح العام مثل RSA، حيث يكون تحليل ناتج كبير لعددين أوليين أمرًا صعبًا.

تُطبّق أنظمة الذكاء الاصطناعي التحليل إلى العوامل الأولية على خصائص نظرية الأعداد، وتحليل مفاتيح التشفير، والتعلم الموحد الآمن. كما تتناول أبحاث التعلم الآلي ما بعد الكمومية مقاومة التحليل إلى العوامل الأولية.

نعم. يقوم GitHub Copilot والمساعدون المماثلون الذين يعملون بالذكاء الاصطناعي بأتمتة التعليمات البرمجية الأساسية لعمليات القسمة التجريبية والغربلة، على الرغم من أن المطورين ما زالوا يتحققون من التعقيد والحالات الحدية مثل n = 1.

تلخيص هذه التدوينة بـ: