Using pprof to profile your code we get this:
(pprof) top5
30.01s of 30.02s total (  100%)
Dropped 4 nodes (cum <= 0.15s)
      flat  flat%   sum%        cum   cum%
       30s 99.93% 99.93%        30s 99.93%  main.sommeDiviseursPropres
     0.01s 0.033%   100%     30.01s   100%  main.main
         0     0%   100%     30.01s   100%  runtime.goexit
         0     0%   100%     30.01s   100%  runtime.main
(pprof) list
Total: 30.02s
ROUTINE ======================== main.main in 
/home/morwar/repos/amigos/main.go
      10ms     30.01s (flat, cum)   100% of Total
         .          .     46: os.Exit(2)
         .          .     47: }
         .          .     48:
         .          .     49: var res []intTuple
         .          .     50: for a := 2; a <= limite; a++ {
         .     22.90s     51: b := sommeDiviseursPropres(a)
         .      7.10s     52: if b > a && sommeDiviseursPropres(b) == a {
         .          .     53: res = append(res, intTuple{a, b})
         .          .     54: }
         .          .     55: }
      10ms       10ms     56: fmt.Println(res)
         .          .     57:}
ROUTINE ======================== main.sommeDiviseursPropres in 
/home/morwar/repos/amigos/main.go
       30s        30s (flat, cum) 99.93% of Total
         .          .     13:
         .          .     14:type intTuple struct {
         .          .     15: a, b int
         .          .     16:}
         .          .     17:
      10ms       10ms     18:func sommeDiviseursPropres(nb int) int {
      10ms       10ms     19: res := 1
      30ms       30ms     20: sqrt := int(math.Sqrt(float64(nb)))
     1.69s      1.69s     21: for div := 2; div <= sqrt; div++ {
    26.96s     26.96s     22: if nb%div == 0 {
     380ms      380ms     23: res += div + (nb / div)
         .          .     24: }
         .          .     25: }
         .          .     26: if sqrt*sqrt == nb {
         .          .     27: return res - sqrt
         .          .     28: }
     920ms      920ms     29: return res
         .          .     30:}
         .          .     31:
         .          .     32:func main() {
         .          .     33: go func() {
         .          .     34: log.Println(http.ListenAndServe(":8080", nil))


so it looks like the mod is taking a while.

Em sábado, 25 de fevereiro de 2017 23:38:19 UTC-3, Éric Jacoboni escreveu:
>
> Hi,
>
> I'm just trying to learn Go and, as i do with other languages, i first try 
> to code some trivial algorithms.
> Here, i want to implement a program which displays the amical numbers 
> couples given a limit. I'm using the very same algorithm i'm using in 
> Python, Java, Haskell, Scala, Nim, etc.)
>
> My Go code is visible here : http://sprunge.us/bSgW
>
> When running the executable created with go build main.go on a MacBook Pro 
> and with a limit of 1000000, the result is processed in  8,815 secs ($ time 
> ./main 1000000)
> The same program written in Java gives 2.6 secs (and it counts the first 
> load of the jvm...), Nim gives 2.5 secs, Scala gives 5 secs. Python (with 
> pypy) gives 10 secs. 
> I've not tried with C but i'm sure it would be even faster than the Java 
> or Nim versions.
>
> So, given all my programs are using the same algorithm, why the Go version 
> is so slow comparing to Java/Scala ? I was expecting Go to be faster than a 
> language running on the jvm.  
>
> Any hints? 
>
>
>
>

-- 
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