من یه راه دیگه می گم که سرعت کد رو بسیار بالا می بره:
علی جان عدد 100 رو در نظر بگیر. برای این که متوجه بشویم که این عدد اول هست یا نه، جذر عدد رو به دست میاریم. جذر 100 برابر 10 است. اعداد اول کوچک تر یا مساوی 10 عبارت اند از 2 ، 3 ، 5 ، 7 . حالا 100 را بر تک تک این اعداد تقسیم می کنیم. اگر بر یکی از این ها بخش پذیر بود اول نیست. 100 بر 2 بخش پذیره پس اول نیست!
یا 211 : جذر 211 تقریبا" 14/5 هستش. اعداد اول کوچک تر یا مساوی 14 عبارت اند از 2 ، 3 ، 5 ، 7 ، 11 ، 13 . 211 بر هیچ یک از این شش عدد اول بخش پذیر نیست پس 211 عدد اول است.
متوجه شدی که چقدر ساده است. این عمل غربال گری که به غربال اراتستن معروفه باعث می شه که تعداد گردش ها خیلی خیلی کم بشه. من یک سورس VB.Net غربال اراتستن رو تهیه کردم (خیلی ساده استبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید ):
البته باز هم این روش برای اعداد بزرگ کارآمد نیست.
به طور کلی باید یه مطالبی رو در مورد نظریه ی اعداد فرابگیری. با نظریه اعداد می تونی الگوریتم هایی طراحی کنی که خیلی سریع تر عمل می کنند.
امیدوارم دوستان دیگه، راه حل هایی بهتری ارئه بدند.برای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید
موفق باشی
آرمینبرای مشاهده این لینک/عکس می بایست عضو شوید ! برای عضویت اینجا کلیک کنید






پاسخ با نقل قول
Bookmarks