خوارزمية العامل الرئيسي: C، Python مثال
⚡ ملخص ذكي
تقوم خوارزمية العامل الأولي بتحليل أي عدد صحيح موجب إلى حاصل ضرب أعداد أولية باستخدام القسمة التجريبية حتى الجذر التربيعي، أو نوع من غربال إراتوستينس الذي يخزن كل عامل أولي أصغر.
ما هو التخصيم الأولي؟
العامل الأولي للعدد هو عامل يكون هو نفسه عاملاً أولياً. رقم اولي، لا يقبل القسمة إلا على 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]
مقالات ذات صلة
- هيكل بيانات الرسم البياني و Algorithms
- مشكلة البائع المتجول
- خوارزمية طريقة التنصيف
- خوارزمية فرز الجرافة
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 التكراري 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 ليس عددًا أوليًا ولا عددًا مركبًا.
- يساعد التحليل إلى العوامل الأولية في قابلية القسمة، وتبسيط الكسور، وإيجاد المقامات المشتركة.
- كما أن التحليل إلى العوامل الأولية يدعم أيضاً رموز التشفير القائمة على الأرقام.


