package main
import (
"fmt"
"time"
)
//题目:
//
//三角形数序列是由对自然数的连加构造而成的。所以第七个三角形数是 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. 那么三角形数序列中的前十个是:
//
//1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
//
//下面我们列出前七个三角形数的约数:
//
//1: 1
//3: 1,3
//6: 1,2,3,6
//10: 1,2,5,10
//15: 1,3,5,15
//21: 1,3,7,21
//28: 1,2,4,7,14,28
//可以看出 28 是第一个拥有超过 5 个约数的三角形数。
//
//那么第一个拥有超过 500 个约数的三角形数是多少?
func yueshu(a int32) int32 {
n := make(map[int32]int32)
for {
if a > 1 {
var i int32
for i = 2; i <= a; i++ {
if a%i == 0 {
n[i]++
a /= i
break
}
}
} else {
res := int32(1)
for _, value := range n {
res *= (value + 1)
}
return res
}
}
}
func triangle(n int32) int32 {
return (1 + n) * n / 2
}
func main() {
t := time.Now()
var i int32 = 1
for {
if yueshu(triangle(i)) > 500 {
fmt.Println(triangle(i))
break
}
i++
}
tt := time.Now()
fmt.Println("耗时:", (tt.Nanosecond()-t.Nanosecond())/1e6, "ms")
}
输出:GOROOT=C:\Program Files\Go #gosetup
GOPATH=C:\Users\Administrator\go #gosetup
"C:\Program Files\Go\bin\go.exe" build -o C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_Euler12_go.exe C:\Users\Administrator\Documents\GoProject\src\Euler12.go #gosetup
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_Euler12_go.exe
76576500
耗时: 42 ms
进程 已完成,退出代码为 0
|