الگوریتم‌های اعداد

الگوریتم‌های اعداد: آزمون اول بودن بهینه، سیو اراتوستن برای همه اعداد اول و الگوریتم اقلیدس GCD

سه الگوریتم پایه اعداد

این سه الگوریتم در مسائل الگوریتمی و برنامه‌نویسی واقعی مدام برمی‌گردند:

۱. اول بودن — فقط تا جذر!

اگر n مرکب باشد، حتماً عاملی ≤ √n دارد (اگر همه عامل‌ها بزرگ‌تر از جذر بودند، حاصل‌ضرب از n بزرگ‌تر می‌شد!). پس فقط تا جذر بررسی کنید — O(√n) به‌جای O(n).

بهینه‌تر: فقط ۲ و اعداد فرد — نصفِ عملیات!

۲. سیو اراتوستن (Sieve of Eratosthenes)

«همه اعداد اول تا n» لازم است؟ سیو: همه را اول علامت بزن؛ از ۲ شروع، مضارب هر اول را «مرکب» علامت بزن. فقط از i² شروع کن (کوچک‌ترها قبلاً زده شده‌اند)!

۳. الگوریتم اقلیدس GCD

بزرگ‌ترین مقسوم‌علیه مشترک — زیبایی ریاضی:

gcd(a, b) = gcd(b, a mod b)
gcd(a, 0) = a

مثال: gcd(48, 18) = gcd(18, 12) = gcd(12, 6) = gcd(6, 0) = 6

هر دو گام حداقل نصف می‌شوند ← O(log min(a,b))!

کاربردها

الگوریتمکاربرد
اول بودنرمزنگاری، مسائل اعداد
سیوپیش‌محاسبه اول‌ها، فاکتورگیری
GCDکسر به فرم کوچک، LCM، زمان‌بندی تناوبی

LCM: کوچک‌ترین مضرب مشترک = a×b / gcd(a,b) — برای «چند بار بعد هم‌زمان می‌شوند؟»

نکته: math.gcd پایتون آماده دارد؛ اما در مصاحبه باید الگوریتم اقلیدس را بنویسید — سه خط! برای سیو، در n های خیلی بزرگ (۱۰⁹+) حافظه کافی نیست ← Segmented Sieve یا آزمون Miller-Rabin (پیشرفته).

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل الگوریتم‌ها است.

ابزارهای مرتبط