Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1 ... 79, 80, 81, 82, 83, 84, 85  След.
 Re: Как писать быстрые программы
Аватара пользователя
wrest
Благодарю.

Да, вижу что вы взяли предпоследнее число из списка-430.

wrest в сообщении #1724379 писал(а):
Что будет если отключить полларда, найдёт ли ECM малый множитель так же быстро (ответ: да).

Написано, что используется алгоритм Полларда-Брента. Но я пока не понял в чём разница.

Отключать "полларда", из наших форумчан, видимо, умеете только вы.

И что значит "так же быстро"? Обычно не бывает точных совпадений, это вы, видимо, округляете.

Насколько понимаю, нет никаких критериев, позволяющих в начале факторизации определить что она будет долгой. Иначе зачем тогда брать B1 всё больше и больше...

То есть, я так понимаю что фактор может найтись в любой момент и никто не в состоянии предсказать, что он ещё долго не найдётся.

Или всё-таки какие-то критерии есть?

 Re: Как писать быстрые программы
Аватара пользователя
wrest
Hу вот прога с использованием вашего модифицированного кунштюка. Проверил, для 45 начальных чисел цепочек (а их полный список есть в конце 79-й страницы) даёт 430 частных с нужной разбивкой.

Код:
default(parisizemax, 128M);
cha(n)=my(nfac=factor(n,2^20-2));return([nfac[#nfac[,1],1],192/numdiv(nfac)*2]);
{kn = 0;print;
name = fileopen("20_74_povozr.txt");
while( n = eval(filereadstr(name)),
kn++;
for( dobmes = 0, 11,
if(cha(n + dobmes)[2] == 4 || cha(n + dobmes)[2] == 8,
kcha++;
print(kn, ".   ", dobmes+1, ".   ", cha(n + dobmes) );
));
print;
);
print;print(kcha);print;
}quit

Сам я буду использовать больший список из 100 с лишним кортежей. Он скоро досчитается.

 Re: Как писать быстрые программы
Yadryara в сообщении #1724383 писал(а):
Отключать "полларда", из наших форумчан, видимо, умеете только вы.

Не только лишь все могут, да. Полларда отключает 3-й бит во флаге функции factorint():
Цитата:
? ?factorint
factorint(x,{flag=0}): factor the integer x. flag is optional, whose binary digits mean 1: avoid MPQS, 2: avoid first-stage ECM (may fall back on it
later), 4: avoid Pollard-Brent Rho and Shanks SQUFOF, 8: skip final ECM (huge composites will be declared prime).

?


-- добавлено через 51 минуту --

Yadryara в сообщении #1724383 писал(а):
Насколько понимаю, нет никаких критериев, позволяющих в начале факторизации определить что она будет долгой. Иначе зачем тогда брать B1 всё больше и больше...

Ну в общем-то да. Тут вопрос что значит "критериев позволяющих определить". Например протестировав на простоту при помощи ispseudoprime(), можно факторизацией не заниматься вовсе если число уже псевдопростое.

-- добавлено через 16 минут --

Yadryara в сообщении #1724383 писал(а):
Или всё-таки какие-то критерии есть?

Есть наши (а не программы факторизации) предположения и некоторые знания.
Например, мы можем знать, что делителей меньше 2^20 нет, т.к. мы это уже проверили.
Программа предполагает, что ей дали "случайное" число, в котором могут быть и небольшие и кратные множители и так далее. Предварительными "фильтрациями" мы делаем числа менее "случайными".

Пока что, как я понял из соседней темы, в целом числа в цепочке, после деления на "внедрённые" при помощи КТО множители, ведут себя как случайные, с поправкой на то, что эти остатки-частные точно не содержат "внедрённых" множителей.

 Re: Как писать быстрые программы
Аватара пользователя
wrest в сообщении #1724385 писал(а):
Полларда отключает 3-й бит во флаге функции factorint():

Только он отключает ещё и "Брента" с "Шенксом". А вот как отключить именно "Полларда", видимо, мало кто знает.

Ещё в переводе прочитал:

" 8: пропускать заключительный ECM (большие составные числа будут объявлены простыми)."

А как не только заключительный ECM пропускать, а, например, частное определённой величины, или любое сразу после найденного 1-го или 2-го фактора?

wrest в сообщении #1724385 писал(а):
Например, мы можем знать, что делителей меньше 2^20 нет, т.к. мы это уже проверили.

А вот теперь я сам напомню о поправке. От первого свободного до 2^20-2 всё-таки могут встретиться, потому что пока проверка выполняется один раз.

wrest в сообщении #1724385 писал(а):
Пока что, как я понял из соседней темы, в целом числа в цепочке, после деления на "внедрённые" при помощи КТО множители, ведут себя как случайные, с поправкой на то, что эти остатки-частные точно не содержат "внедрённых" множителей.

Правильно понимаете.

 Re: Как писать быстрые программы
Yadryara в сообщении #1724386 писал(а):
А вот теперь я сам напомню о поправке. От первого свободного до 2^20-2 всё-таки могут встретиться, потому что пока проверка выполняется один раз.

Это у вас так. А у меня не могут.
Поэтому я написал что "мы можем".
Это значит что кто-то из нас (по крайней мере я) - может.

-- добавлено через 4 минуты --

Yadryara в сообщении #1724386 писал(а):
А как не только заключительный ECM пропускать, а, например, частное определённой величины, или любое сразу после найденного 1-го или 2-го фактора?

Нужна четкая постановка задачи, с примерами.
По "или" - omega_upto() чем не подходит?

 Re: Как писать быстрые программы
Аватара пользователя
wrest в сообщении #1724389 писал(а):
А у меня не могут.

Я вот эту проверку не стал добавлять, опасаясь что она отнимет много времени.

А у вас какая средняя скорость нахождения кортежей? И каких?

wrest в сообщении #1724389 писал(а):
Нужна четкая постановка задачи, с примерами.

Пока нету.

wrest в сообщении #1724389 писал(а):
По "или" - omega_upto() чем не подходит?

Прошу меня извинить. Может и подходит, я просто забыл уже что она делает.

Я вчера не стал отключать печать частных и у меня теперь коллекция из более чем 24 тысяч частных. 15 из них я вчера показал. Цепочек в той партии нашлось 23 штуки.

А с учётом сегодняшних, их набралось 107 штук, в которые входят и 45 ранее показанных:

(107)

Код:
611142354891569765230302686332186116343885992050683915745888694620256245
2316348085067614233038834588836454025964097532976096806121982080297056245
6082737104456168245187787749872530527546498661120318380302874241001056245
6968653207739632708334561252623180419316846217113315059194775273001056245
8270524074670532399671484627515335041989800251815802192673525572636256245
9266186576049688464673021364017844528144851479450172473102652889909856245
9400926298860291500557944011566895716835130638105685754945393532597856245
10507371180341425593415795458903168463834429999762902760014075585999456245
12772696442739943221809077341497956726456499563581607373911653396533856245
13413019623182831525835943442398333842830878650306742822940776048796256245
14964307839828263684524116818468131472564560500019684651077835232655456245
15255940403285885548349694319270294697298235174673422385232721165148256245
15510467269353741786670691981065171840454292652038336512888265822581856245
16321638169022395795457155022274843072020421868539739617198850457103456245
16508460551520046779868027918538908803505796803273145209573319971868256245
16838431287566287958797572699740303702582563608624578707242354466268256245
17543649369764610273711890612985839744524097094216702344792973199657056245
18617942953595781097267177355321004617368516335253402280101703911388256245
19074535611946629581331545237384605846507929020180244604037919192015456245
19286551160371142398627137281306943389302833034474770429995523257180256245
20481668508357757086430414189953849878691904631296772218464531716175456245
21037666504912039908371015145550419377364284493129100950969815246876256245
21139482497672802439223096022180320461579291343066422935689595761372256245
21424073935374462152200083098529285446466595268082706218262696784233056245
22260746085667326016368256648440213064750199383015001277756420900380256245
22912979715011050677234063489801789075839832788710264704295668718364256245
23314397983197917381639395693960317128418238441164261240450402365084256245
23774471179311262662016137219519334498535297662998726000770935119759456245
23810554982684706691984152580808040681337834888917679445482271307548256245
25543129134400612123113961941597885973340767208176378844674190860316256245
25756151287204072736035290601671729194242189372244026740437128041039456245
26116029641282568727688888895777391111574019817974246175168748092853856245
26312224168260411241527011800317577174205557576749312900680713326735456245
27788427726611912447814155108341408815374653335077963132747291514524256245
28572167827864311031455307068742679898732876112210366031848283524469856245
29292654122127422394092999322435069539346758303509286912331186308367456245
29875495538338049234408996526905097966407323343060090743826821636700256245
30470088979000909073642116609093411675480368362620434836912695687311456245
31879929435677976304387490799719916549516268623837351238365675240783456245
33543424521488444117477712594103307248608477182014163156889102870735456245
34121421339357612956510451783188830090976882559199447286698558219484256245
35012575872792474989452949908035781770264029829462010486614350780137056245
35305036284051466291328652674880258021088110244715187211796171568437856245
35736503128021817475348223387423222143708581323261090416600576638953056245
37490237529828734199570104748359083534169939288938711572933322238837856245
37750986785200758465539248579253466813866197215898329312526467075625056245
39549242830576182219910051971051334482502454804644651268099986965596256245
39781649188401226452999524677636466584792472170126779945269537449244256245
39973041420878553407722168862015737864124862653503596405486857870569056245
42419763705446848926876146403742499825620543805977654743696949561397856245
44423480165415630153268451071942551701185577196857043931611795852265056245
44643952480747648619794193728994015558844776050532214797442704336693856245
45728818091965287267003587679323701159478374438263805179812510575119456245
46007004109739518507295094316561878410870587995345788068053836968412256245
46438703283974298931684115100644039891492270820887321679227426184937056245
47369282890072498307784249488461570566409355678331858858507761546319456245
48011235890864384475144517870354266991117187862348653905090641600937056245
48204623328766293973215165071530017886863374001120360971133126711029856245
48481578260903356578717680180878438723282334553263728416323050278159456245
48838220588805561548604875731672680096073018541673041855876338960757856245
50177385142549683606033735530518096320772761402961887811699781466025056245
51368168517824694361152175279513873499933748556819798331241557077455456245
52731678906823856618614003885373491638294289034794707067863284507881056245
52937702976696576064630667776532780754240486431857664498456288330012256245
53700892855890143158480078121348893863114877107766695619297182088181856245
53886657403578656924132323112580712701460250374746798727701562258805856245
55609974046790492973518533002454569166564052103633682437093244810191456245
57852072146010577101883285794870115805219554142556404039213024545129056245
59769068667214839507475352969647455691784391642521975830046748867471456245
59778353327259193765676981985601891759351913207402275699192369212341856245
60210664058490918308769189515868083085246162988110987196868583555893856245
62293958868463205254047735226551432335764344881464614622839389519324256245
63971136825343048749094978892676683299750421994056100801247474889909856245
64934078581803409353376792539571279920994558459352807784843790374543456245
65862214750258306272565772507852209917449133557847865609970767853199456245
66463241251073196259483059583666529839300657628854694508069234893045856245
66895890318182633429998608130191357822719764377269860559413763387957856245
68266317661664606327183333781435813609832740288225653290206720707881056245
69866731751655400849915397514101596392386576656537059933765840087529056245
73056981806710709174900223644609459835779373915687879657881232168053856245
74510058535644667307910798902259923322313364903767212807572613041487456245
74523945627631922964707914098415363279127089606834626761406518990185056245
75297734826884799094556400582392428470538598492425473108739560158761056245
75780674756354140052557015480965493229764929173355483261686066777525856245
76430534665477751584202426740453254043933314162076378841262816311861856245
78053436266228709024711166556911843681600546376120759465157195567759456245
79603144229598480022983084265112225800769228318294386237223638414671456245
82547604829954900895486279823421334795814031290782952705217807003253856245
82778528510715725193943079551354795695627836665473216318568018511209056245
83489570144195869857077121153211582812173702424034565781263988949148256245
83592054546210872172916455157050866949331649065825624027047462981673056245
83686731866411174175749768792664785899928111307893453676114205141993056245
85838860841803879168127825007555868968553034504696795697876215907701856245
85935071103641132778861515406069826459470034637093325230544118559516256245
86648014931756205475147227427458592895262180012557668963278620923676256245
88444950680487500586673928500369745884163184657358809316449021576437856245
88908058869925181705834128024242042866069438978444588856448228655631456245
89854085636811316591386457257132764270738506264685449271464180669532256245
91042855548523859314234936324022232922092560017147259246657180332815456245
92277738044216335408810706337747172823791697406637445855810437465551456245
94841131617985735851833995867404172827405555958533163053648724448348256245
95420529232365324043157023096623608325906992372030161050244646569781856245
96023109755278968816782027775748964424336161210651861044686211129935456245
96191062412142189357940827927801780501327769177539853068234598058741856245
96798924036621854908816719894830810664183507951443747958050132753103456245
97909343682748705170771989473720682118744813289420695897317369528924256245
99471308849189565569519524313540894542647444653689835226307122441653856245

Уже даже засёк времена. Буду анализировать.

 Re: Как писать быстрые программы
Yadryara в сообщении #1724390 писал(а):
А у вас какая средняя скорость нахождения кортежей? И каких?

Средняя скорость нулевая. Я не нашёл никаких кортежей, т.к. я не занимался поиском кортежей.
У меня никакие программы не работают при однократном их запуске более нескольких (ну скажем 10) минут.

 Re: Как писать быстрые программы
Аватара пользователя
А я занимался. Вот внёс ещё последние результаты и добавил ещё одну колонку. Более чем 11-кратное падение скорости, в сравнении с соседней длиной. И я грешу в первую очередь именно на факторизацию.

Код:
6-поточный счёт

Кортеж         Серия   Обсчитано   2^   n от   Найдено     Время   Милсек/   Скорость    Падение
                       паттернов        0 до   D(192,L)   секунд   паттерн   корт/сут   скорости

D(192, 7)   1-0- 6-0         360   17   1e43      1464       522      1449     242526
D(192, 8)   1-0- 7-0         180   18   1e50       160       283      1567      49011        4.9
D(192, 9)   1-0- 8-0        1440   18   1e55       162       961       667      14570        3.4
D(192,10)   1-0- 9-0        4320   19   1e61       104      2374       549       3786        3.8
D(192,11)   1-0-10-0       52800   19   1e66       100      8784       166        984        3.8
D(192,12)   1-0-11-0      251980   20   1e74       107    110021       437         84*      11.7
D(192,13)   
D(192,14)   
D(192,15)   

* — другие 3 серии не посчитаны до 100 находок.

 Re: Как писать быстрые программы
Dmitriy40 в сообщении #1724377 писал(а):
Все формата 4 (pq) кроме последнего имеют именно pq и разлагаются медленно (QS). Т.е. разлагать их смысла мало.
Формата 8 (pqr) 3шт реально имеют pq и тоже медленно. И ещё 2шт с правильным pqr тоже медленно.
Вердикт: надо улучшать фильтрацию.

Тут такие мысли. Можем ли мы определить является ли число скорее pq или pqr без полной факторизациии.
Ну если бы у нас был метод "определить величину наименьшего множителя", то как-то могли бы.
Допустим что мы хотим определить, является ли число размером 210 бит вида pqr (т.е. pq нас НЕ устраивает). Тогда нам надо определить, нет ли у этого числа множителя размером до 70бит. Если нет, то число будет pq.
И вот как раз ECM вроде бы даёт нам такую возможность, выбором параметра B1. Без гарантий, наверное, но всё же. Но это надо проверять, насколько надёжно считать что число не имеет множителей меньших чего-то если они не нашлись при данном B1.
Мы тут с Квеном :mrgreen: посчитали вероятности того что число величиной 66 десятичных цифр состоит из omega=2,3.. множителей при условии, что множителей меньших 2^20 точно нет и число точно составное
Код:
omega | P(omega)
------+-------------------
2     |              38.1%
3     |              30.4%
4     |              18.2%
5     |               8.7%
6     |               3.5%
7     |               1.2%
------+-------------------
Σ     |             100.0%


-- добавлено через 33 минуты --

Dmitriy40 в сообщении #1724377 писал(а):
. И ещё 2шт с правильным pqr тоже медленно.

Вот это напрягает. Там, интересно, медленно ищется наименьший множитель (который не больше кубического корня из факторизуемго числа) или он мелкий, а частное большое, оно из двух больших множителей и потому медленно раскладывается...

 Re: Как писать быстрые программы
wrest в сообщении #1724399 писал(а):
И вот как раз ECM вроде бы даёт нам такую возможность, выбором параметра B1. Без гарантий, наверное, но всё же. Но это надо проверять, насколько надёжно считать что число не имеет множителей меньших чего-то если они не нашлись при данном B1.
Я же приводил цитату, из которой видно формулу $P(n,N)=\exp(-n/N)$, где $n$ сколько попыток (кривых, rounds) сделано при данном B1 и $N$ сколько их нужно для вероятности пропуска делителя в 37% (63% что будет найден). Для 20-значных делителей B1 предлагают 11000 и N=rounds=74, если сделать всего n=3 попытки, то вероятность обнаружения составит $1-P(3,74)=1-\exp(-3/74)\approx4\%$.
Если B1 взять больше, то и вероятность возрастёт (насколько - не знаю), но и считаться будет чуть медленнее. Зато делитель может найтись в первых же попытках (чем больше B1 тем вероятнее, и наоборот).

Если же говорить о скорости, то выгодно проверять места pqr, для них можно брать B1 в размере для кубического корня и если за сколько-то попыток (rounds) делитель не найден, то считать что там более вероятно pq и откладывать такие цепочки "на потом" или вообще бросать в надежде найти более легко разлагаемую.
Впрочем pq тоже выгодно до кубического корня проверить, вдруг там окажется pqr и более (составное частное после найденного делителя).

И разумеется не делать сразу все 74 (к примеру) попытки для всех мест цепочки, а сделать сначала по 1-3, вдруг быстро найдётся причина отбросить цепочку, если не нашлась, сделать ещё 3-10 попытки, потом ещё 10-30, потом ещё 20-50, потом ещё 50-200, а потом бросить её нафиг. ;-) Ровно как с пределами в factor раньше делали, сначала 2^12, потом 2^15, потом 2^18, потом 2^20, потом другие проверки.
Скорость в кортежах в час будет мизерной (много могут не найтись), зато в кандидатах в секунду будет высокой - а только она меня и интересует.
Ускорять же разложение подходящих мест и цепочек я не вижу перспектив.

 Re: Как писать быстрые программы
Dmitriy40 в сообщении #1724404 писал(а):
Если же говорить о скорости, то выгодно проверять места pqr, для них можно брать B1 в размере для кубического корня и если за сколько-то попыток (rounds) делитель не найден, то считать что там более вероятно pq и откладывать такие цепочки "на потом" или вообще бросать в надежде найти более легко разлагаемую.

Именно.
Dmitriy40 в сообщении #1724404 писал(а):
Впрочем pq тоже выгодно до кубического корня проверить, вдруг там окажется pqr и более (составное частное после найденного делителя).
Да, и если НЕ нашли делитель меньше кубического корня, значит там скорее всего pq и есть.

 Re: Как писать быстрые программы
wrest в сообщении #1724412 писал(а):
Да, и если НЕ нашли делитель меньше кубического корня, значит там скорее всего pq и есть.
Да, но это не приносит пользы в виде отброса цепочки.
Цель же (у меня, при поиске длинных цепочек) - найти причину отбросить цепочку, а не не оставить её для дальнейших проверок.

 Re: Как писать быстрые программы
Dmitriy40 в сообщении #1724404 писал(а):
Ускорять же разложение подходящих мест и цепочек я не вижу перспектив.

Был такой случай.
Код:
? n=24148925432634573196763136754090576178896835988651533646083;
? factorint(n,4)
time = 2,286 ms.
%332 =
[        91324854742256183 1]
[       119961603280218769 1]
[2204278978420309489529029 1]
? nr=my_ecm(n,3,random(100),6000)
***   Warning: compiler generates copy for `n'.
time = 872 ms.
%333 = 119961603280218769
? my_mpqs(n/nr)
time = 45 ms.
%334 = [91324854742256183, 2204278978420309489529029]
?

Тут видно, что встроенная факторизаци отработала за 2286 мс.
По логам видно, что первый ECM сдался на B1=2200 и перешёл на MPQS.
Но ECM с параметром B1=6000 один множитель находит за 886мс, и дальше MPQS работает очень быстро за 45мс.
В сумме , "тонкой настройкой" под конкретное число, можно ускорить факторизацию [этого числа] в 2.5 раза.
Особенность тут в том, что ECM нашёл не наименьший множитель.
Более того, наименьший множитель ECM упорно искать не хочет.

-- добавлено через 16 минут --

Dmitriy40 в сообщении #1724404 писал(а):
где $n$ сколько попыток (кривых, rounds) сделано при данном B1

Кстати вот эти ваши B1 - это из YAFU или из pari?

 Re: Как писать быстрые программы
wrest в сообщении #1724418 писал(а):
Кстати вот эти ваши B1 - это из YAFU или из pari?
А это по моему без разницы - они из эллиптических кривых, т.е. самого алгоритма ECM, независимо от конкретной реализации. От реализации будет зависеть rounds (в том смысле что не понимаю что за многочлены там используются и как это влияет на вероятность) и seed.
Но табличка с B1 и rounds выше - нет, не из PARI и не из YAFU, хотя к последнему очень близка, он использует самую правую колонку для количества кривых и именно такие шаги для B1. Думаю величины B1 выбраны довольно оптимально при условии выполнения указанного количества попыток (что в PARI не так и потому и шаги по B1 другие).

wrest в сообщении #1724418 писал(а):
Особенность тут в том, что ECM нашёл не наименьший множитель.
Более того, наименьший множитель ECM упорно искать не хочет.
Да, это проблема. Хотя и не страшная: ну найдётся не наименьший делитель, но ведь найдётся же. А значит частное станет сильно меньше и его проверка (любая) ускорится.
Ради нахождения конкретного делителя можете с seed поиграться, но это такое себе занятие, почти совсем случайное (насколько я понимаю механику ECM), в смысле не предсказуемое от факторизуемого числа - и потому бесполезное для ускорения программы.

wrest в сообщении #1724418 писал(а):
Но ECM с параметром B1=6000 один множитель находит за 886мс, и дальше MPQS работает очень быстро за 45мс.
А за сколько второй ECM найдёт второй делитель? Может быстрее 45мс? ;-)
Скорость MPQS сильно зависит от длины аргумента (в битах). А скорость ECM сильнее зависит от длины делителя, а не аргумента. Потому для малых делителей ECM выгоднее, но MPQS надёжнее (обязательно разложит, пусть и медленно).

 Re: Как писать быстрые программы
Dmitriy40 в сообщении #1724421 писал(а):
А за сколько второй ECM найдёт второй делитель? Может быстрее 45мс? ;-)

Нет, медленнее. Он же работает детерминировано, время работы зависит от B1 (ну и от rounds конечно но там как повезёт).
В этом недостаток ECM с точки зрения управления ожиданиями, и одновременно преимущество.
Вот сколько ищется первый множитель:
Код:
? n=24148925432634573196763136754090576178896835988651533646083;
? c=0;for(i=1,100,if(my_ecm(n,2,random(100),15000),c++));print(c)
100
time = 1min, 38,063 ms.
?

Видим, что нашёлся 100 раз из 100, за 938мс в среднем.
Посмотрим за сколько найдёт оба:
Код:
? n=24148925432634573196763136754090576178896835988651533646083;
? {c1=0;c2=0;
for(i=1,100,
  nr=my_ecm(n,2,random(100),15000);
  if(nr,
    nr2=my_ecm(n/nr,2,random(100),15000);
    c1++
    ,
    next()
    );
  if(nr2,c2++));
  print(" Один:",c1," Оба:",c2);}
Один:100 Оба:17
time = 3min, 10,893 ms.
?

Видим что второй множитель с теми же параметрами находит только в 17% случаев, а времени тратит (на второй) столько же сколько и на первый, в сумме в два раза дольше.
То есть, в этом конкретном случае, не надо второй раз запускать ECM.
Запускаем теперь второй раз mpqs:
Код:
? n=24148925432634573196763136754090576178896835988651533646083;
? {c1=0;c2=0;
for(i=1,100,
  nr=my_ecm(n,2,random(100),15000);
  if(nr,
    nr2=my_mpqs(n/nr);
    c1++
    ,
    next()
    );
  if(nr2,c2++));
  print(" Один:",c1," Оба:",c2);}
Один:100 Оба:100
time = 1min, 35,184 ms.
?

Итого, полная факторизация за 935мс в среднем (то есть время mpqs на грани погрешности, мгновенно если первый множитель уже найден), против более 2 секунд встроенной факторизации.

Но это - на конкретном числе, совсем не факт что на других будет обгонять.
Даже скорее не будет...

-- добавлено через 16 минут --

Dmitriy40 в сообщении #1724421 писал(а):
А это по моему без разницы - они из эллиптических кривых, т.е. самого алгоритма ECM, независимо от конкретной реализации.

Ну смотрите, вот для
n=24148925432634573196763136754090576178896835988651533646083
Для параметров ECM в pari-шной реализации, rounds=2, B1=15000 и seed случайный от 0 до 99, множитель находится в 100 случаях из 100 (но не факт что в 1000 случаях из 1000) . То есть вероятность, похоже, больше 98%
А что было бы у вас, какие оптимальные B1 и rounds?
Сдаётся мне что B1 это не что-то универсально принятое.

P.S. На всякий случай, как у меня определены встроенные ECM и MPQS:
Код:
install(Z_ECM,GLLU);
install(mpqs,G);
isnl(x=[])=x;
my_ecm(n,rounds,seed,b1)=isnl(Z_ECM(n,rounds,seed,b1));
my_mpqs(n:int)=my(divisor=component(mpqs(n),1));return([divisor,n/divisor]);


В my_mpqs я возвращаю вектор потому, что не уверен что там возвращается простое, так что на всякий случай возвращаю два множителя, и потом проверяю их оба на простоту.

 [ Сообщений: 1272 ]  На страницу Пред.  1 ... 79, 80, 81, 82, 83, 84, 85  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group