I just coded up a quick amicable/perfect finder (using an expensive inner
mechanism) and still it runs in 1.3 seconds in single processor mode. The
times are not comparable because the techniques may not be the same, but I
don't think it is fair to judge Go as slow.

babar:amicable mtj$ time amicable 1000000
 perfect: sum         1 =         1
 perfect: sum         6 =         6
 perfect: sum        28 =        28
 perfect: sum       496 =       496
 perfect: sum      8128 =      8128
amicable: sum       220 =       284, sum       284 =       220
amicable: sum      1184 =      1210, sum      1210 =      1184
amicable: sum      2620 =      2924, sum      2924 =      2620
amicable: sum      5020 =      5564, sum      5564 =      5020
amicable: sum      6232 =      6368, sum      6368 =      6232
amicable: sum     10744 =     10856, sum     10856 =     10744
amicable: sum     12285 =     14595, sum     14595 =     12285
amicable: sum     17296 =     18416, sum     18416 =     17296
amicable: sum     63020 =     76084, sum     76084 =     63020
amicable: sum     66928 =     66992, sum     66992 =     66928
amicable: sum     67095 =     71145, sum     71145 =     67095
amicable: sum     69615 =     87633, sum     87633 =     69615
amicable: sum     79750 =     88730, sum     88730 =     79750
amicable: sum    100485 =    124155, sum    124155 =    100485
amicable: sum    122265 =    139815, sum    139815 =    122265
amicable: sum    122368 =    123152, sum    123152 =    122368
amicable: sum    141664 =    153176, sum    153176 =    141664
amicable: sum    142310 =    168730, sum    168730 =    142310
amicable: sum    171856 =    176336, sum    176336 =    171856
amicable: sum    176272 =    180848, sum    180848 =    176272
amicable: sum    185368 =    203432, sum    203432 =    185368
amicable: sum    196724 =    202444, sum    202444 =    196724
amicable: sum    280540 =    365084, sum    365084 =    280540
amicable: sum    308620 =    389924, sum    389924 =    308620
amicable: sum    319550 =    430402, sum    430402 =    319550
amicable: sum    356408 =    399592, sum    399592 =    356408
amicable: sum    437456 =    455344, sum    455344 =    437456
amicable: sum    469028 =    486178, sum    486178 =    469028
amicable: sum    503056 =    514736, sum    514736 =    503056
amicable: sum    522405 =    525915, sum    525915 =    522405
amicable: sum    600392 =    669688, sum    669688 =    600392
amicable: sum    609928 =    686072, sum    686072 =    609928
amicable: sum    624184 =    691256, sum    691256 =    624184
amicable: sum    635624 =    712216, sum    712216 =    635624
amicable: sum    643336 =    652664, sum    652664 =    643336
amicable: sum    667964 =    783556, sum    783556 =    667964
amicable: sum    726104 =    796696, sum    796696 =    726104
amicable: sum    802725 =    863835, sum    863835 =    802725
amicable: sum    879712 =    901424, sum    901424 =    879712
amicable: sum    898216 =    980984, sum    980984 =    898216

real 0m1.282s
user 0m1.324s
sys 0m0.027s

The perfect numbers fall out from the search for amicable numbers.

Expanding the upper limit to ten million requires 25.942 seconds, which is
20x the time for 10x the range. As the numbers get bigger, the number of
divisors increases, sometimes considerably. This is expensive in my inner
loop, so a really speedy version of this would need to rework that section.
Also, parallelism is easy here.

babar:amicable mtj$ time amicable 10000000
 perfect: sum         1 =         1
 perfect: sum         6 =         6
 perfect: sum        28 =        28
 perfect: sum       496 =       496
 perfect: sum      8128 =      8128
amicable: sum       220 =       284, sum       284 =       220
amicable: sum      1184 =      1210, sum      1210 =      1184
amicable: sum      2620 =      2924, sum      2924 =      2620
amicable: sum      5020 =      5564, sum      5564 =      5020
amicable: sum      6232 =      6368, sum      6368 =      6232
amicable: sum     10744 =     10856, sum     10856 =     10744
amicable: sum     12285 =     14595, sum     14595 =     12285
amicable: sum     17296 =     18416, sum     18416 =     17296
amicable: sum     63020 =     76084, sum     76084 =     63020
amicable: sum     66928 =     66992, sum     66992 =     66928
amicable: sum     67095 =     71145, sum     71145 =     67095
amicable: sum     69615 =     87633, sum     87633 =     69615
amicable: sum     79750 =     88730, sum     88730 =     79750
amicable: sum    100485 =    124155, sum    124155 =    100485
amicable: sum    122265 =    139815, sum    139815 =    122265
amicable: sum    122368 =    123152, sum    123152 =    122368
amicable: sum    141664 =    153176, sum    153176 =    141664
amicable: sum    142310 =    168730, sum    168730 =    142310
amicable: sum    171856 =    176336, sum    176336 =    171856
amicable: sum    176272 =    180848, sum    180848 =    176272
amicable: sum    185368 =    203432, sum    203432 =    185368
amicable: sum    196724 =    202444, sum    202444 =    196724
amicable: sum    280540 =    365084, sum    365084 =    280540
amicable: sum    308620 =    389924, sum    389924 =    308620
amicable: sum    319550 =    430402, sum    430402 =    319550
amicable: sum    356408 =    399592, sum    399592 =    356408
amicable: sum    437456 =    455344, sum    455344 =    437456
amicable: sum    469028 =    486178, sum    486178 =    469028
amicable: sum    503056 =    514736, sum    514736 =    503056
amicable: sum    522405 =    525915, sum    525915 =    522405
amicable: sum    600392 =    669688, sum    669688 =    600392
amicable: sum    609928 =    686072, sum    686072 =    609928
amicable: sum    624184 =    691256, sum    691256 =    624184
amicable: sum    635624 =    712216, sum    712216 =    635624
amicable: sum    643336 =    652664, sum    652664 =    643336
amicable: sum    667964 =    783556, sum    783556 =    667964
amicable: sum    726104 =    796696, sum    796696 =    726104
amicable: sum    802725 =    863835, sum    863835 =    802725
amicable: sum    879712 =    901424, sum    901424 =    879712
amicable: sum    898216 =    980984, sum    980984 =    898216
amicable: sum    947835 =   1125765, sum   1125765 =    947835
amicable: sum    998104 =   1043096, sum   1043096 =    998104
amicable: sum   1077890 =   1099390, sum   1099390 =   1077890
amicable: sum   1154450 =   1189150, sum   1189150 =   1154450
amicable: sum   1156870 =   1292570, sum   1292570 =   1156870
amicable: sum   1175265 =   1438983, sum   1438983 =   1175265
amicable: sum   1185376 =   1286744, sum   1286744 =   1185376
amicable: sum   1280565 =   1340235, sum   1340235 =   1280565
amicable: sum   1328470 =   1483850, sum   1483850 =   1328470
amicable: sum   1358595 =   1486845, sum   1486845 =   1358595
amicable: sum   1392368 =   1464592, sum   1464592 =   1392368
amicable: sum   1466150 =   1747930, sum   1747930 =   1466150
amicable: sum   1468324 =   1749212, sum   1749212 =   1468324
amicable: sum   1511930 =   1598470, sum   1598470 =   1511930
amicable: sum   1669910 =   2062570, sum   2062570 =   1669910
amicable: sum   1798875 =   1870245, sum   1870245 =   1798875
amicable: sum   2082464 =   2090656, sum   2090656 =   2082464
amicable: sum   2236570 =   2429030, sum   2429030 =   2236570
amicable: sum   2652728 =   2941672, sum   2941672 =   2652728
amicable: sum   2723792 =   2874064, sum   2874064 =   2723792
amicable: sum   2728726 =   3077354, sum   3077354 =   2728726
amicable: sum   2739704 =   2928136, sum   2928136 =   2739704
amicable: sum   2802416 =   2947216, sum   2947216 =   2802416
amicable: sum   2803580 =   3716164, sum   3716164 =   2803580
amicable: sum   3276856 =   3721544, sum   3721544 =   3276856
amicable: sum   3606850 =   3892670, sum   3892670 =   3606850
amicable: sum   3786904 =   4300136, sum   4300136 =   3786904
amicable: sum   3805264 =   4006736, sum   4006736 =   3805264
amicable: sum   4238984 =   4314616, sum   4314616 =   4238984
amicable: sum   4246130 =   4488910, sum   4488910 =   4246130
amicable: sum   4259750 =   4445050, sum   4445050 =   4259750
amicable: sum   4482765 =   5120595, sum   5120595 =   4482765
amicable: sum   4532710 =   6135962, sum   6135962 =   4532710
amicable: sum   4604776 =   5162744, sum   5162744 =   4604776
amicable: sum   5123090 =   5504110, sum   5504110 =   5123090
amicable: sum   5147032 =   5843048, sum   5843048 =   5147032
amicable: sum   5232010 =   5799542, sum   5799542 =   5232010
amicable: sum   5357625 =   5684679, sum   5684679 =   5357625
amicable: sum   5385310 =   5812130, sum   5812130 =   5385310
amicable: sum   5459176 =   5495264, sum   5495264 =   5459176
amicable: sum   5726072 =   6369928, sum   6369928 =   5726072
amicable: sum   5730615 =   6088905, sum   6088905 =   5730615
amicable: sum   5864660 =   7489324, sum   7489324 =   5864660
amicable: sum   6329416 =   6371384, sum   6371384 =   6329416
amicable: sum   6377175 =   6680025, sum   6680025 =   6377175
amicable: sum   6955216 =   7418864, sum   7418864 =   6955216
amicable: sum   6993610 =   7158710, sum   7158710 =   6993610
amicable: sum   7275532 =   7471508, sum   7471508 =   7275532
amicable: sum   7288930 =   8221598, sum   8221598 =   7288930
amicable: sum   7489112 =   7674088, sum   7674088 =   7489112
amicable: sum   7577350 =   8493050, sum   8493050 =   7577350
amicable: sum   7677248 =   7684672, sum   7684672 =   7677248
amicable: sum   7800544 =   7916696, sum   7916696 =   7800544
amicable: sum   7850512 =   8052488, sum   8052488 =   7850512
amicable: sum   8262136 =   8369864, sum   8369864 =   8262136
amicable: sum   8619765 =   9627915, sum   9627915 =   8619765
amicable: sum   9071685 =   9498555, sum   9498555 =   9071685
amicable: sum   9199496 =   9592504, sum   9592504 =   9199496
amicable: sum   9339704 =   9892936, sum   9892936 =   9339704
amicable: sum   9363584 =   9437056, sum   9437056 =   9363584

real 0m25.942s
user 0m26.395s
sys 0m0.109s

Michael
(Coding at breakfast in the Zurich, Switzerland airport on the way to
Muscat, Oman)

http://www.ams.org/journals/mcom/1967-21-098/S0025-5718-1967-0222006-7/S0025-5718-1967-0222006-7.pdf

On Sun, Feb 26, 2017 at 2:33 AM, John Souvestre <j...@souvestre.com> wrote:

> Changing just the mod operation to int32 made the whole program run about
> 2.5 times faster for me.  Wow!  I had no idea that there would be that much
> difference.
>
> John
>
>     John Souvestre - New Orleans LA
>
> -----Original Message-----
> From: golang-nuts@googlegroups.com [mailto:golang-nuts@googlegroups.com]
> On Behalf Of Konstantin Shaposhnikov
> Sent: 2017 February 26, Sun 00:42
> To: golang-nuts
> Subject: [go-nuts] Re: [Newbie] Why this code is so slow?
>
> int type in Go is 64 bit on 64 bit system . Most likely you are using 32
> bit integers in other languages (e.g. int in Java). 64 bit division is
> slower than 32 bit. Try changing your Go program to use int32 instead and
> see if it becomes faster.
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>



-- 
Michael T. Jones
michael.jo...@gmail.com

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to