ECM(1) April 22, 2003 ECM(1)

ecm - تجزیه اعداد صحیح با استفاده از روش‌های ECM، P-1 یا P+1

ecm [گزینه‌ها] B1 [B2min-B2max | B2]

برنامه ecm ابزاری برای تجزیه اعداد صحیح به عوامل اول با استفاده از روش خم بیضوی (ECM)، روش P-1، یا روش P+1 است. بخش‌های بعدی پارامترهای مربوط به این الگوریتم‌ها را شرح می‌دهند.

B1

B1 کران مرحله ۱ است. این یک پارامتر اجباری است. این مقدار را می‌توان در قالب عدد صحیح (برای مثال 3000000) یا در قالب ممیز شناور (3000000.0 یا 3e6) مشخص کرد. بزرگ‌ترین مقدار ممکن برای B1 برابر با 9007199254740996 برای P-1، و ULONG_MAX یا 9007199254740996 (هر کدام که کوچک‌تر باشد) برای ECM و P+1 است. تمام اعداد اول 2 <= p <= B1 در مرحله ۱ پردازش می‌شوند.

B2

B2 کران مرحله ۲ است. این پارامتر اختیاری است: اگر مشخص نشود، یک مقدار پیش‌فرض از روی B1 محاسبه می‌شود که باید نزدیک به بهینه باشد. همانند B1، می‌توان آن را در قالب عدد صحیح یا ممیز شناور مشخص کرد. بزرگ‌ترین مقدار ممکن برای B2 تقریباً 9e23 است، اما در صورت مشخص کردن گزینه -k، به تعداد بلوک‌های k بستگی دارد. تمام اعداد اول B1 <= p <= B2 در مرحله ۲ پردازش می‌شوند. اگر B2 < B1 باشد، هیچ مرحله ۲ای انجام نمی‌شود.

B2min-B2max

همچنین می‌توان از قالب B2min-B2max استفاده کرد، بدین معنا که تمام اعداد اول B2min <= p <= B2max باید پردازش شوند. بنابراین مشخص کردن تنها B2 معادل B1-B2 است. مقادیر B2min و B2max می‌توانند به میزان دلخواه بزرگ باشند، اما با توجه به تعداد بلوک‌های k، اختلاف آن‌ها نباید تقریباً از 9e23 فراتر رود.

-pm1

اجرای P-1 به جای روش پیش‌فرض (ECM).

-pp1

اجرای P+1 به جای روش پیش‌فرض (ECM).

-x0 x

[ECM, P-1, P+1] استفاده از x (عدد صحیح یا گویای با دقت دلخواه) به عنوان نقطه اولیه. برای مثال، -x0 1/3 معتبر است. در صورت مشخص نشدن، x از مقدار سیگما برای ECM، یا به صورت تصادفی برای P-1 و P+1 تولید می‌شود.

-sigma s

[ECM] استفاده از s (عدد صحیح با دقت دلخواه) به عنوان مولد منحنی. در صورت حذف، s به صورت تصادفی تولید می‌شود.

-A a

[ECM] استفاده از a (عدد صحیح با دقت دلخواه) به عنوان پارامتر منحنی. در صورت حذف، از مقدار سیگما تولید می‌شود.

-go val

[ECM, P-1, P+1] ضرب نقطه اولیه در val، که می‌تواند هر عبارت معتبری باشد، و احتمالاً نویسه ویژه N را به عنوان جای‌نگهدار برای عدد ورودی فعلی دربرگیرد. مثال:
ecm -pp1 -go "N^2-1" 1e6 < composite2000

-k k

[ECM, P-1, P+1] اجرای k بلوک در مرحله ۲. برای یک مقدار مشخص از B2، افزایش k میزان مصرف حافظه در مرحله ۲ را به بهای زمان پردازنده (CPU) بیشتر کاهش می‌دهد.

-treefile file

برخی جدول‌های داده را در فایل‌های دیسک ذخیره می‌کند تا مقدار حافظه اشغال‌شده در مرحله ۲ را به بهای I/O دیسک کاهش دهد. داده‌ها در فایل‌های file.1، file.2 و غیره نوشته خواهند شد. با مرحله ۲ سریع برای P+1 و P-1 کار نمی‌کند.

-power n

[ECM] استفاده از x^n برای بسط Brent-Suyama (-power 1 بسط Brent-Suyama را غیرفعال می‌کند). چندجمله‌ای پیش‌فرض بسته به روش و B2 انتخاب می‌شود.

-dickson n

[ECM] استفاده از چندجمله‌ای Dickson با درجه-n برای بسط Brent-Suyama.

-maxmem n

استفاده حداکثر از n مگابایت حافظه در مرحله ۲.

-ntt, -no-ntt

فعال یا غیرفعال کردن کد تبدیل نظریه اعداد (Number-Theoretic Transform) برای محاسبات چندجمله‌ای در مرحله ۲. با NTT، مقدار dF توانی از ۲ انتخاب می‌شود، و به تعداد اعداد اول مناسبی که در یک کلمه ماشین (machine word) جای می‌گیرند محدود است (که این فقط در سیستم‌های ۳۲ بیتی یک محدودیت محسوب می‌شود). نگارش -no-ntt حافظه بیشتری مصرف می‌کند، اما برای اعداد ورودی بزرگ سریع‌تر از NTT است. به‌طور پیش‌فرض، NTT برای P-1، P+1 و برای ECM روی اعدادی با حداکثر اندازه ۳۰ کلمه ماشین استفاده می‌شود.

-q

حالت بی‌صدا. تجزیه‌های پیدا شده در خروجی استاندارد چاپ می‌شوند، در حالی که فاکتورها با فاصله از یکدیگر جدا شده‌اند؛ یک خط برای هر عدد ورودی (اگر عاملی یافت نشود، خود عدد ورودی صرفاً کپی می‌شود).

-v

حالت پرگو. اطلاعات بیشتری چاپ می‌شود؛ گزینه‌های -v بیشتر، میزان جزئیات خروجی را افزایش می‌دهند. با یک -v، نوع ضرب پیمانه‌ای استفاده‌شده، مقدار اولیه x0، پارامترها و پیشرفت گام ۲، و منحنی‌ها و زمان مورد انتظار برای یافتن عامل‌هایی با اندازه‌های مختلف در ECM چاپ می‌شوند. با -v -v، مقدار A برای ECM و باقی‌مانده‌ها در پایان گام ۱ و گام ۲ چاپ می‌شوند. تعداد -v بیشتر، داده‌های داخلی را برای اشکال‌زدایی چاپ می‌کند.

-timestamp

هربار که یک منحنی ECM جدید یا یک اجرای P+1 یا P-1 پردازش می‌شود، یک برچسب زمانی چاپ می‌کند.

الگوریتم‌های متعددی برای ضرب پیمانه‌ای در دسترس هستند. برنامه تلاش می‌کند بهترین مورد را برای هر ورودی پیدا کند؛ می‌توان با گزینه‌های زیر استفاده از یک روش مشخص را اجبار کرد.

-mpzmod

استفاده از تابع mpz_mod کتابخانه GMP (برای ورودی‌های بزرگ از مرتبه زیر-مربعی است، اما برای ورودی‌های کوچک مقداری سربار ایجاد می‌کند).

-modmuln

استفاده از ضرب مونتگومری (نسخه درجه دو). معمولاً بهترین روش برای ورودی‌های کوچک است.

-redc

استفاده از ضرب مونتگومری (نسخه زیر-مربعی). از نظر تئوری برای ورودی‌های بزرگ بهینه است.

-nobase2

غیرفعال کردن کد ویژه مبنای ۲ (که وقتی عدد ورودی عامل بزرگی از 2^n+1 یا 2^n-1 باشد استفاده می‌شود، -v را ببینید).

-base2 n

اجبار به استفاده از کد ویژه مبنای ۲؛ در صورتی که n > 0 باشد، عدد ورودی باید مقسوم‌علیه 2^n+1 باشد، یا اگر n < 0 باشد، مقسوم‌علیه 2^|n|-1 باشد.

گزینه‌های زیر امکان انجام گام ۱ و گام ۲ را به صورت جداگانه فراهم می‌کنند، خواه روی رایانه‌های مختلف، در زمان‌های مختلف، یا با استفاده از نرم‌افزارهای مختلف (به ویژه، برنامه Prime95/mprime جورج ولتمن می‌تواند خروجی گام ۱ مناسب برای از سرگیری با GMP-ECM را تولید کند). همچنین تقسیم گام ۲ به چند اجرا با استفاده از گزینه B2min-B2max می‌تواند مفید باشد.

-inp file

خواندن ورودی از فایل file به جای ورودی استاندارد.

-save file

ذخیره نتیجه گام ۱ در file. اگر file وجود داشته باشد، یک خطا ایجاد می‌شود. مثال: برای اجرای تنها گام ۱ با B1=1000000 روی عدد مرکب موجود در فایل "c155" و ذخیره نتیجه آن در فایل "foo"، استفاده کنید از:
ecm -save foo 1e6 1 < c155

-savea file

مانند -save، اما به انتهای فایل‌های موجود الحاق می‌کند.

-resume file

از سرگیری باقی‌مانده‌ها از file؛ در صورتی که file برابر با "-" باشد، از ورودی استاندارد می‌خواند. مثال: برای انجام گام ۲ در ادامه محاسبه گام ۱ فوق، استفاده کنید از:
ecm -resume foo 1e6

-chkpoint file

نوشتن دوره‌ای باقی‌مانده فعلی در مرحله ۱ در file. در صورت قطعی برق و غیره، محاسبه می‌تواند با گزینه -resume ادامه یابد.
ecm -chkpnt foo -pm1 1e10 < largenumber.txt 

“حالت حلقه” (گزینهٔ -c n) امکان اجرای چندین منحنی را روی هر عدد ورودی فراهم می‌کند. گزینه‌های زیر رفتار آن را کنترل می‌کنند.

-c n

اجرای n بار روی هر عدد ورودی (پیش‌فرض یک است). این گزینه عمدتاً برای P+1 (برای مثال با n=3) یا برای ECM مفید است، جایی که می‌توان n را بر روی تعداد منحنی‌های مورد انتظار برای یافتن یک عامل d-رقمی با کران مرحلهٔ ۱ مشخص تنظیم کرد. این گزینه با -resume, -sigma, -x0 ناسازگار است. دادن -c 0 یک حلقهٔ بی‌پایان تا زمان پیدا شدن یک عامل ایجاد می‌کند.

-one

در حالت حلقه، با پیدا شدن یک عامل متوقف می‌شود؛ حالت پیش‌فرض ادامه دادن تا زمانی است که هم‌عامل (cofactor) اول باشد یا تعداد دفعات اجرای مشخص‌شده به پایان برسد.

-b

پردازش اول‌سطح (Breadth-first): در حالت حلقه، برای هر عدد ورودی یک منحنی اجرا می‌شود، سپس یک منحنی دوم برای هر کدام و به همین ترتیب. این حالت پیش‌فرض هنگام استفاده از -inp است.

-d

پردازش اول‌عمق (Depth-first): در حالت حلقه، ابتدا n منحنی برای اولین عدد، سپس n منحنی برای دومین عدد و به همین ترتیب اجرا می‌شود. این حالت پیش‌فرض هنگام استفاده از ورودی استاندارد است.

-ve n

در حالت حلقه، در اجرای دوم و دفعات پس از آن، تنها عبارت‌هایی را در خروجی نمایش می‌دهد که حداکثر n نویسه داشته باشند. مقدار پیش‌فرض -ve 0 است.

-i n

در حالت حلقه، مقدار B1 را پس از هر منحنی به اندازهٔ n افزایش می‌دهد.

-I n

در حالت حلقه، مقدار B1 را پس از هر منحنی در ضریبی وابسته به n ضرب می‌کند. مقدار پیش‌فرض یک است که روی یک سیستم بهینه خواهد بود، در حالی که می‌توان از -I 10 هنگام تلاش برای تجزیهٔ هم‌زمان یک عدد روی ۱۰ سیستم یکسان استفاده کرد.

این گزینه‌ها امکان اجرای دستورات پوسته را برای گسترش قابلیت‌های GMP-ECM فراهم می‌کنند.

-prpcmd cmd

دستور cmd را به جای توابع درونی خود GMP-ECM برای آزمودن اول بودن عامل‌ها و هم‌عامل‌ها اجرا می‌کند. عدد مورد آزمایش از طریق stdin ارسال می‌شود. کد خروج 0 به عنوان “احتمالاً اول” (probably prime) و کد خروج غیر صفر به عنوان “مرکب” (composite) تفسیر می‌شود.

-faccmd cmd

هر زمان عاملی توسط P-1 ،P+1 یا ECM پیدا شود، دستور cmd را اجرا می‌کند. عدد ورودی، عامل و هم‌عامل هر کدام در یک خط از طریق stdin فرستاده می‌شوند. از این گزینه می‌توان برای مثال جهت ارسال خودکار عامل‌های جدید با ایمیل استفاده کرد:
ecm -faccmd 'mail -s “$HOSTNAME found a factor”
                me@myaddress.com' 11e6 < cunningham.in

-idlecmd cmd

دستور cmd را پیش از شروع هر منحنی ECM یا هر تلاش P-1 یا P+1 روی یک عدد اجرا می‌کند. اگر وضعیت خروج cmd غیر صفر باشد، GMP-ECM فوراً خاتمه می‌یابد؛ در غیر این صورت به طور عادی ادامه می‌دهد. در هنگام اجرای cmd، برنامهٔ GMP-ECM متوقف می‌شود؛ این سازوکار راهکاری ارائه می‌دهد تا مثلاً در هنگام شلوغ بودن سیستم بتوان GMP-ECM را به حالت خواب درآورد.

-n

اجرای برنامه در حالت “nice” (اولویت کمتر از حالت عادی).

-nn

اجرای برنامه در حالت “very nice” (اولویت بی‌کار یا idle).

-B2scale f

ضرب کردن کران پیش‌فرض مرحله ۲ B2 در مقدار ممیز شناور f. مثال: -B2scale 0.5 مقدار پیش‌فرض B2 را بر ۲ تقسیم می‌کند.

-stage1time n

افزودن n ثانیه به زمان مرحله ۱. این گزینه برای به دست آوردن زمان مورد انتظار دقیق با -v در صورتی که بخشی از مرحله ۱ در اجرای دیگری انجام شده باشد، مفید است.

-cofdec

اجبار خروجی کوفاکتور به صورت ده‌دهی (حتی در صورت استفاده از عبارات محاسباتی).

-h, --help

نمایش توضیحی کوتاه از نحوه استفاده ecm، پارامترها و گزینه‌های خط فرمان.

-printconfig

چاپ پارامترهای پیکربندی استفاده‌شده برای کامپایل و خروج از برنامه.

اعداد ورودی می‌توانند چندین حالت داشته باشند:

اعداد ده‌دهی خام مانند 123456789.

می‌توان در فایل از کامنت استفاده کرد: همه چیز بعد از “//” تا انتهای خط نادیده گرفته می‌شود.

ادامه خط. اگر خطی به نویسه بک‌اسلش “\” ختم شود، ادامه‌دار در نظر گرفته شده و در خط بعدی دنبال می‌شود.

می‌توان از عبارات محاسباتی رایج استفاده کرد. مثال: 3*5+(2+7)^10.

فاکتوریل: مثال 53!.

چندفاکتوریل: برای مثال 15!3 به معنی 15*12*9*6*3 است.

پریموریل (Primorial): برای مثال 11# به معنی 2*3*5*7*11 است.

پریموریل کاهش‌یافته: برای مثال 17#5 به معنی 5*7*11*13*17 است.

توابع:

GCD(a,b): بزرگ‌ترین مقسوم‌علیه مشترک

مثال: GCD(120,28) = 4

Phi(n,x): n-امین چندجمله‌ای دایره‌بر (سیکلوتومیک) محاسبه‌شده در x

مثال: Phi(3,5) = 1 + x + x^2 = 31

وضعیت خروج، نتیجه آخرین منحنی ECM یا تلاش P-1/P+1 انجام‌شده توسط برنامه را نشان می‌دهد. بیت‌های منفرد نشان‌دهنده رویدادهای مشخصی هستند، به‌ویژه:

بیت 0

0 در صورت پایان عادی برنامه، 1 در صورت وقوع خطا

بیت 1

0 اگر هیچ عامل سره‌ای یافت نشد، 1 در غیر این صورت

بیت 2

0 اگر عامل مرکب باشد، 1 اگر عامل احتمالاً اول باشد

بیت 3

0 اگر هم‌عامل مرکب باشد، 1 اگر هم‌عامل احتمالاً اول باشد

بنابراین، مقادیر وضعیت خروج زیر ممکن است رخ دهند:

0

خاتمه عادی برنامه، هیچ عاملی یافت نشد

1

خطا

2

عامل مرکب یافت شد، هم‌عامل مرکب است

6

عامل احتمالاً اول یافت شد، هم‌عامل مرکب است

8

عدد ورودی یافت شد

10

عامل مرکب یافت شد، هم‌عامل احتمالاً اول است

14

عامل احتمالاً اول یافت شد، هم‌عامل احتمالاً اول است

گزارش باگ‌ها را به https://gitlab.inria.fr/zimmerma/ecm ارسال کنید.

Pierrick Gaudry <gaudry at lix dot polytechnique dot fr> کد اسمبلی کارآمدی برای mul/redc ترکیبی ارائه کرده است؛

Jim Fougeron <jfoug at cox dot net> در نوشتن تجزیه‌کننده عبارت و چندین گزینه خط فرمان مشارکت داشته است؛

Laurent Fousse <laurent at komite dot net> در نوشتن کد ضرب میانی (middle product) و ابزارهای autoconf/automake مشارکت داشته و نگه‌دارنده بسته Debian است؛

Alexander Kruppa <(lastname)al@loria.fr> در برآورد احتمال موفقیت برای ECM، مرحله دوم جدید P+1 و P-1 (به همراه P.-L. Montgomery)، کد جدید اسمبلی AMD64 برای mulredc و برخی موارد دیگر مشارکت داشته است؛

Dave Newman <david.(lastname)@jesus.ox.ac.uk> کد ضرب Kronecker-Schoenhage و NTT را ارائه کرده است؛

Jason S. Papadopoulos در افزایش سرعت کد NTT مشارکت داشته است

Paul Zimmermann <zimmerma at loria dot fr> نویسنده نسخه نخست برنامه و نگه‌دارنده اصلی GMP-ECM است.

نکته: نشانی‌های ایمیل مبهم‌سازی شده‌اند، جایگزینی‌های لازم باید آشکار باشند.

11/03/2023 April 22, 2003