AcWing 874. 筛法求欧拉函数-代码注释-golang
原题链接
简单
作者:
望哥
,
2020-07-17 23:40:18
,
所有人可见
,
阅读 637
package main
import "fmt"
func euler(n int, primes []int) int {
if len(primes) == 0 {
return 1
}
res:=n
for _,x:=range primes{
res/=x
res*=x-1
}
return res
}
func sumEuler(n int) int{
primes:=make([][]int, n+1)
st:=make([]bool, n+1)
for i:=2;i<=n;i++{
if !st[i]{
for j:=i;j <= n; j+=i {
st[j] = true
primes[j] = append(primes[j], i)
}
}
}
res:=0
for i:=1;i<=n;i++{
res+=euler(i,primes[i])
}
return res
}
func main(){
var n int
fmt.Scan(&n)
fmt.Println(sumEuler(n))
}