PRIMESIEVE(1)   PRIMESIEVE(1)

primesieve - تولید اعداد اول

primesieve [START] STOP [OPTION]...

تولید اعداد اول و/یا چندتایی‌های اول (k-tuplets) درون بازهٔ [START, STOP] (< 2^64) با استفاده از غربال اراتستن بخش‌بندی‌شده (segmented sieve of Eratosthenes). ابزار primesieve شامل چندین بهینه‌سازی و الحاقیه به غربال اراتستن است که کارایی را به طور چشمگیری افزایش می‌دهند: مضارب اعداد اول کوچک از پیش غربال می‌شوند، از تجزیهٔ چرخشی (wheel factorization) برای نادیده گرفتن مضارب با عوامل اول کوچک استفاده می‌کند و الگوریتم غربال سطلی (bucket sieve) را به کار می‌برد که کارایی حافظهٔ نهان (cache) را هنگام غربال مقادیر > 2^32 بهبود می‌بخشد. همچنین primesieve چندنخی (multi-threaded) است؛ این ابزار به طور پیش‌فرض از تمام هسته‌های پردازندهٔ موجود برای شمارش اعداد اول و یافتن n-امین عدد اول استفاده می‌کند.

غربال اراتستن بخش‌بندی‌شده دارای پیچیدگی زمانی O(n log log n) عملیات بوده و از O(n^(1/2)) بیت حافظه استفاده می‌کند. به‌طور دقیق‌تر، primesieve به ازای هر عدد اول در حال غربال، ۸ بایت مصرف می‌کند؛ بنابراین حافظهٔ مصرفی آن تقریباً با رابطهٔ PrimePi(n^(1/2)) * 8 بایت (به ازای هر نخ) قابل تقریب است.

-c[NUM+], --count[=NUM+]

شمارش اعداد اول و/یا چندتایی‌های اول، 1 <= NUM <= 6. شمارش اعداد اول: -c یا --count، شمارش اعداد اول دوقلو: -c2 یا --count=2، شمارش اعداد اول سه‌گانه: -c3 یا --count=3، و غیره. همچنین می‌توانید اعداد اول و چندتایی‌های اول را هم‌زمان بشمارید؛ برای نمونه -c123 اعداد اول، اول دوقلو و اول سه‌گانه را می‌شمارد.

--cpu-info

چاپ اطلاعات پردازنده: نام پردازنده، بسامد، تعداد هسته‌ها، اندازهٔ حافظه‌های نهان و غیره.

-d, --dist=DIST

غربال بازهٔ [START, START + DIST].

-h, --help

نمایش این منوی راهنما.

-n, --nth-prime

یافتن n-امین عدد اول؛ برای نمونه 100 -n صدمین عدد اول را می‌یابد. اگر دو عدد N START مشخص شوند، n-امین عدد اول > START را پیدا می‌کند؛ برای نمونه 2 100 -n دومین عدد اول > 100 را می‌یابد.

--no-status

غیرفعال کردن نمایش وضعیت پیشرفت.

-p[NUM], --print[=NUM]

چاپ اعداد اول یا چندتایی‌های اول، 1 <= NUM <= 6. چاپ اعداد اول: -p، چاپ اعداد اول دوقلو: -p2، چاپ اعداد اول سه‌گانه: -p3، و غیره.

-q, --quiet

حالت بی‌صدا، خروجی کمتری چاپ می‌کند.

-R, --RiemannR

تقریب PrimePi(x) با استفاده از تابع R ریمان: R(x).

--RiemannR-inverse

تقریب n-امین عدد اول با استفاده از معکوس تابع R ریمان: R^-1(x).

-s, --size=SIZE

تنظیم اندازهٔ آرایهٔ غربال بر حسب KiB، به طوری که 16 <= SIZE <= 8192 باشد. به طور پیش‌فرض primesieve از اندازه‌ای استفاده می‌کند که با اندازهٔ حافظهٔ نهان L1 پردازنده (به ازای هر هسته) همخوانی داشته باشد یا کمی کوچک‌تر از اندازهٔ حافظهٔ نهان L2 پردازنده باشد. این تنظیم تأثیر چشمگیری بر کارایی دارد؛ در پردازنده‌های نامتعارف، گاهی primesieve در شناسایی اندازهٔ حافظهٔ نهان پردازنده ناموفق است که معمولاً افت سرعت شدیدی ایجاد می‌کند. در این حالت می‌توانید با تنظیم دستی اندازهٔ غربال به میزان اندازهٔ حافظهٔ نهان L1 یا L2 پردازنده (به ازای هر هسته)، کارایی را به‌طور قابل توجهی بهبود بخشید.

-S, --stress-test[=MODE]

اجرای آزمون پایداری و فشار (stress test). مقدار MODE می‌تواند CPU (پیش‌فرض) یا RAM باشد. حالت CPU حافظهٔ کمی مصرف می‌کند (< 5 MiB به ازای هر نخ) و بیشترین بار را بر پردازنده وارد می‌کند. در مقابل، حالت RAM بسیار بیشتر از حالت CPU حافظه مصرف می‌کند (هر نخ حدود 1.16 GiB)، اما دمای پردازنده معمولاً به اندازهٔ حالت CPU بالا نخواهد رفت. آزمون فشار تا زمانی که یک خطای محاسباتی رخ دهد (به دلیل نقص سخت‌افزاری) یا مهلت زمانی به پایان برسد، به کار خود ادامه می‌دهد. مهلت زمانی پیش‌فرض ۲۴ ساعت است که می‌توان آن را با گزینهٔ --timeout=SECS تغییر داد. آزمون فشار به طور پیش‌فرض به تعداد هسته‌های پردازنده از نخ‌ها استفاده می‌کند؛ تعداد نخ‌ها با استفاده از گزینهٔ --threads=NUM قابل تغییر است.

--test

اجرای آزمون‌های درستی‌سنجی گوناگون (< 1 دقیقه).

-t, --threads=NUM

تنظیم تعداد نخ‌ها، 1 <= NUM <= تعداد هسته‌های پردازنده. به طور پیش‌فرض primesieve از تمام هسته‌های پردازندهٔ در دسترس برای شمارش اعداد اول و یافتن n-امین عدد اول استفاده می‌کند.

--time

چاپ زمان سپری‌شده بر حسب ثانیه.

--timeout=SECS

تنظیم مهلت زمانی آزمون فشار بر حسب ثانیه. واحدهای زمانی برای ثانیه، دقیقه، ساعت، روز و سال با پسوندهای s، m، h، d یا y نیز پشتیبانی می‌شوند؛ برای نمونه --timeout 10m مهلت زمانی را روی ۱۰ دقیقه تنظیم می‌کند. مهلت پیش‌فرض آزمون فشار ۲۴ ساعت است.

-v, --version

چاپ نگارش و اطلاعات مجوز.

primesieve 1000

شمارش اعداد اول <= 1000.

primesieve 1e6 --print

چاپ اعداد اول <= 10^6.

primesieve 1e6 --print > primes.txt

ذخیرهٔ اعداد اول <= 10^6 در یک فایل متنی.

primesieve 2^32 --print=2

چاپ اعداد اول دوقلو <= 2^32.

primesieve 1e16 --dist=1e10 --threads=1

شمارش اعداد اول درون بازهٔ [10^16, 10^16 + 10^10] با استفاده از تنها یک نخ.

https://github.com/kimwalisch/primesieve

Kim Walisch <kim.walisch@gmail.com>

02/17/2024