Skip to content

Instantly share code, notes, and snippets.

@sethtroisi
Last active July 30, 2021 01:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sethtroisi/60cfd68ad24770d7048d6372579f09bd to your computer and use it in GitHub Desktop.
Save sethtroisi/60cfd68ad24770d7048d6372579f09bd to your computer and use it in GitHub Desktop.
function ECMeffortExpected() {
return array(
20 => array( 11000, 100),
25 => array( 50000, 280),
30 => array( 250000, 640),
35 => array( 1000000, 1580),
40 => array( 3000000, 4700),
45 => array( 11000000, 9700),
50 => array( 44000000, 17100),
55 => array(110000000, 46500),
60 => array(260000000, 112000),
65 => array(800000000, 360000),
);
}
function ECMeffortExpectedV2() {
return array(
array(120, 50000000, 468346),
array(1000, 1000000, 4504, 661846),
array(47000, 4700000, 32, 365, 6094, 136696, 3916536),
array(49000, 4900000, 31, 350, 5735, 126343, 3551628),
array(50000, 11760000, 24, 266, 4191, 89221, 2457784),
array(50000, 13428460, 24, 257, 4043, 85847, 2359279),
array(50000, 13775590, 24, 255, 4004, 85847, 2333130),
array(50000, 14400000, 23, 253, 3964, 84942, 2307195),
array(50000, 4550000, 31, 352, 5729, 125365, 3497777),
array(50000, 4750000, 31, 347, 5656, 123649, 3447438),
array(50000, 50000, 203, 3356, 74785, 2123635),
array(50000, 500000, 59, 723, 12592, 289922, 8424326),
array(50000, 5000000, 31, 343, 5570, 121642, 3388537),
array(50000, 50000000, 18, 189, 2902, 60068, 1615275),
array(50000, 5100000, 30, 341, 5537, 120887, 3365934),
array(50000, 6350000, 29, 321, 5192, 112854, 3131368),
array(50000, 6400000, 29, 321, 5181, 112577, 3123266),
array(50000, 6450000, 29, 320, 5169, 112304, 3115255),
array(50000, 6650000, 29, 317, 5123, 111252, 3084562),
array(50000, 6700000, 29, 317, 5113, 110993, 3076973),
array(50000, 6750000, 29, 316, 5102, 110737, 3069464),
array(50000, 6800000, 28, 316, 5091, 110495, 3062033),
array(51000, 5000000, 30, 337, 5446, 117963, 3257962),
array(51000, 5100000, 30, 336, 5414, 117217, 3236755),
array(60000, 6000000, 27, 285, 4307, 87077, 2237173),
array(65000, 5000000, 28, 283, 4171, 82040, 2044619),
array(65000, 6500000, 26, 263, 3860, 75521, 1874080),
array(70000, 7300000, 25, 243, 3452, 65496, 1574523),
array(74000, 7400000, 24, 233, 3247, 60293, 1416699),
array(76620, 10000000, 21, 203, 2757, 49987, 1162083),
array(76620, 15000000, 20, 184, 2478, 44582, 1017614),
array(76620, 23259610, 18, 165, 2193, 39100, 885657),
array(76620, 24176890, 18, 163, 2172, 38699, 876077),
array(76620, 26954350, 18, 161, 2131, 37904, 857126),
array(80000, 8000000, 22, 207, 2794, 50047, 1133627),
array(100000, 10000000, 20, 171, 2124, 34994, 725930),
array(100000, 13600000, 18, 158, 1945, 31835, 656971),
array(100000, 14200000, 18, 156, 1925, 31477, 649200),
array(199900, 19990000, 14, 98, 971, 12639, 202436, 3952595),
array(250000, 129632592, 9, 57, 506, 5876, 86052, 1506583),
array(250000, 25000000, 12, 83, 769, 9243, 137840, 2499542),
array(250000, 30000000, 12, 80, 736, 8924, 132844, 2374662),
array(250000, 38060828, 12, 76, 700, 8351, 123841, 2206799),
array(250000, 50000000, 11, 72, 653, 7756, 114525, 2033638),
array(445657, 50000000, 10, 55, 437, 4454, 55136, 823853),
array(500000, 500000, 39, 314, 3249, 41092, 616244),
array(1000000, 1000000, 27, 186, 1618, 17025, 210734, 3000162),
array(1000000, 10000000, 12, 63, 443, 3819, 39590, 490166, 6836654),
array(1000000, 100000000, 7, 35, 225, 1837, 18454, 216662, 2938408),
array(2100100, 200100100, 6, 25, 136, 951, 7909, 77935, 870800),
array(2500000, 250000000, 6, 23, 122, 812, 6518, 61211, 658630, 7987143),
array(3000000, 100000000, 6, 26, 138, 902, 7114, 64499, 676319, 7980511),
array(3000000, 1000000000, 4, 16, 82, 518, 3898, 34668, 350675, 4038400),
array(3000000, 3000000, 17, 92, 630, 5157, 49098, 532418, 6473717),
array(3000000, 300000000, 5, 21, 108, 691, 5353, 48467, 496235, 5793368),
array(3000000, 4592487916, 4, 13, 63, 382, 2833, 24736, 246684, 2801813),
array(4000000, 400000000, 5, 19, 91, 550, 4003, 33534, 324335, 3526972),
array(6000000, 600000000, 5, 16, 72, 408, 2743, 21391, 187556, 1864970),
array(11000000, 100000000000, 2, 7, 25, 115, 645, 4232, 31733, 265903, 2483358),
array(11000000, 11000000, 10, 47, 253, 1619, 11896, 98615, 908942, 9206747),
array(11000000, 110000000, 6, 20, 90, 484, 3042, 21535, 174626, 1574156),
array(11000000, 1100000000, 4, 12, 51, 256, 1532, 10599, 83100, 727689, 6968777),
array(11000000, 30114149530, 3, 8, 29, 139, 797, 5306, 40264, 340600, 3211083),
array(11000000, 36578884662, 3, 7, 28, 134, 766, 5084, 38271, 325095, 3059329),
array(23000000, 23000000, 8, 34, 163, 923, 5979, 43460, 349652, 3078677),
array(23000000, 81050459506, 2, 6, 21, 88, 446, 2601, 17130, 126770, 1035215),
array(25000000, 2500000000, 3, 10, 35, 158, 824, 4932, 33295, 249808, 2059209),
array(30000000, 3000000000, 3, 9, 33, 143, 724, 4201, 27456, 199225, 1603509),
array(41000000, 4100000000, 3, 8, 29, 121, 592, 3274, 20367, 140389, 1060527),
array(42000000, 4200000000, 3, 8, 29, 120, 581, 3213, 19961, 137408, 1036544),
array(43000000, 198654756318, 2, 5, 16, 62, 281, 1486, 8872, 58618, 428760),
array(43000000, 4300000000, 3, 8, 29, 119, 571, 3153, 19563, 133030, 1002120),
array(44000000, 100000000000, 2, 5, 17, 67, 306, 1619, 9642, 64226, 467628),
array(44000000, 223505479902, 2, 5, 16, 61, 277, 1451, 8589, 56963, 412802),
array(44000000, 44000000, 7, 26, 115, 591, 3461, 22644, 163350, 1286065),
array(44000000, 4400000000, 3, 8, 28, 115, 555, 3025, 18705, 126976, 944182),
array(48000000, 251426235076, 2, 5, 15, 58, 259, 1344, 7887, 51167, 367373),
array(48000000, 279380917212, 2, 5, 15, 57, 258, 1328, 7787, 50828, 362341),
array(48000000, 297984687018, 2, 5, 14, 54, 242, 1251, 7268, 47237, 336176),
array(48000000, 298483725556, 2, 5, 14, 54, 242, 1245, 7268, 47237, 336176),
array(107000000, 10700000000, 3, 7, 20, 74, 314, 1509, 8172, 48374, 315352),
array(109000000, 10900000000, 3, 7, 20, 73, 312, 1496, 8023, 47423, 308791),
array(110000000, 100000000000, 2, 5, 14, 50, 206, 964, 5058, 29344, 186277),
array(110000000, 1000000000000, 2, 4, 11, 36, 144, 660, 3391, 19336, 120877),
array(110000000, 110000000, 6, 19, 74, 337, 1732, 9904, 62176, 424287, 3122228),
array(110000000, 11000000000, 3, 7, 20, 73, 309, 1483, 7949, 47383, 305568),
array(110000000, 776278396540, 2, 4, 11, 38, 151, 692, 3583, 20479, 128305),
array(111000000, 11100000000, 3, 7, 20, 73, 309, 1483, 7945, 46918, 302368),
array(113000000, 11300000000, 3, 7, 20, 72, 304, 1458, 7799, 45997, 296053),
array(160000000, 1288647750406, 2, 4, 10, 32, 121, 525, 2570, 13923, 82560),
array(190000000, 2383889958466, 2, 3, 9, 28, 106, 448, 2143, 11341, 65297),
array(260000000, 1000000000000, 2, 4, 9, 29, 105, 433, 2000, 10258, 57131),
array(260000000, 10000000000000, 2, 3, 7, 22, 78, 315, 1427, 7164, 39324),
array(260000000, 260000000, 5, 14, 51, 211, 973, 4969, 27756, 167887, 1091330),
array(260000000, 26000000000, 2, 5, 15, 50, 189, 820, 3917, 20557, 117362),
array(800000000, 80000000000, 2, 4, 11, 33, 114, 428, 1797, 8257, 41066),
array(850000000, 14142901172416, 2, 3, 6, 17, 52, 186, 745, 3254, 15475),
array(900000000, 90000000000, 2, 4, 11, 32, 109, 408, 1677, 7593, 37199),
array(999999999, 99999999900, 2, 4, 11, 31, 101, 373, 1534, 6844, 33009),
);
}
function ECMeffort($curves) {
// https://www.mersenneforum.org/showpost.php?p=573887&postcount=569
// https://github.com/sethtroisi/misc-scripts/blob/main/mersenne/ecm_progress/test.py
// Try to convert list of <B1, B2, number_of_curves> to t40, t45, t50 progress
// original code by SethTro <https://www.mersenneforum.org/member.php?u=15870> 2021-03-16
// translated to PHP by James Heinrich <james@mersenne.ca> 2021-03-17
$completed = array();
foreach (ECMeffortExpected() as $digits => $B1curvesNeeded) {
$complete = 0;
$curvecount = 0;
list($min_B1, $curves_needed) = $B1curvesNeeded;
foreach ($curves as $curvedata) {
list($B1, $B2, $count) = $curvedata;
if (($B1 >= $min_B1) && ($B2 >= (20 * $min_B1))) {
$complete += ($count / $curves_needed);
$curvecount += $count;
}
}
if ($complete > 0.001) {
$completed[$digits] = array($complete, $curvecount);
}
}
return $completed;
}
function ECMeffortV2($curves) {
$completed = array();
for ($digits = 20; $digits <= 60; $digits += 5) {
$index = 2 + ($digits - 20) / 5;
$complete = 0;
foreach ($curves as $curvedata) {
list($B1, $B2, $count) = $curvedata;
$best = 0.0;
foreach (ECMeffortExpectedV2() as $row) {
if ($B1 >= $row[0] && $B2 >= $row[1] && $index < count($row)) {
$best = max($best, $count / $row[$index]);
}
}
$complete += $best;
}
if ($complete > 0.001) {
$completed[$digits] = array($complete, exp(-$complete));
}
}
return $completed;
}
$curve = array(
array(1000000,100000000,760),
array(3000000,300000000,1378),
array(11000000,1100000000,738),
array(11000000,35133391030,676),
array(43000000,240490660426,296),
);
$effort = ECMeffort($curve);
foreach ($effort as $c => $d) {
list($a, $b) = $d;
echo "\t$c => $a $b<br>";
}
echo "<br>";
$effort = ECMeffortV2($curve);
foreach ($effort as $c => $d) {
list($a, $b) = $d;
echo "\t$c => $a => $b<br>";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment