سلام
همون طور که گفتم، وی بی حرفه ای نمیدونم. اما برای الگوریتمش میتونیم باهم پیش بریم.
دربرنامه نویسی دقیقا از دو نکته اول و دوم تون باهم استفاده میشه.
کاملا این دونکته کاربردیه.
اما نکته آخر را تا حالا نشنیده بودم یا اینکه یادم رفته... خیلی جالبه.
اینکه فقط به یه سری اعداد خاص تقسیمشون کنیم همه اعداد اول را برامون تولید نمیکنه. باید کاملا بدون محدودیتِ تعداد عناصر چک شده پیش بریم.
درسته .
اما میشه به همه اعداد تقسیم کرد به جای تقسیم به عوامل اول.
چون پیدا کردن اعداد اول خودش برای ما سواله.
میشه برای کاهش هزینه اجرا تا یکی مانده به آخری پیش نرویم. تا n/2 امین عنصر پیش بریم. (طبق نکته 2 جناب radical 1111)
نظر من:
فکر نکنم کاری به جز روال عادی وجود داشته باشه.
یعنی تقسیم به همه ی عوامل که دربازه ی [n,n/2] قرار گرفتند و درصورت یک شدن باقی مانده یکی از این تقسیم ها قطع ادامه کار و اعلام مرکب بودن آن. در غیر این صورت اعلام اول بودن آن.
این یعنی باید به اندازه ی نصف عدد حلقه بزنیم.(که این از نظر هزینه بده)
یه کار دیگه اینکه پیش پردازش را پیچیده کنیم اما عوضش هزینه پاسخ سریع بشه!
این طوری:
اگه بدانیم حداکثر عددm میتواند دریافت شود، همه اعداد اول تا اون نقطه را به همون روش بالا بدست بیاریم و به شکل دسته بندی شده ذخیره کنیم .
با استفاده از Hash دسترسی بهشون را آسان و سریع کنیم.
یعنی وقتی از من پرسیده شده آیا عدد k اول است من نمیام حساب کنم آیا این اوله یا نه ، میام به جدول Hashing مراجعه میکنم ببینم اونجا نوشته شده یا نه. یعنی فقط هزینه ی تابع Hash را داریم . زمان اجرا خیلی کم میشه اما هزینه پیش پردازش بالا.
اگه وی بی Hash نداشته باشه هم مهم نیشت بازم میشه به شیوه های جالب دیگه فقط اعداد اول را ذخیره کرد و زمان پرسش کاربر آماده بهش جواب داد.







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


علاقه مندی ها (Bookmarks)