未为数字golang设置位
我试图在golang解决以下问题: 问题如下:未为数字golang设置位,go,bit-manipulation,primes,Go,Bit Manipulation,Primes,我试图在golang解决以下问题: 问题如下: package main import ( "fmt" ) func primeset(n uint64) uint64 { primes := uint64(0) for p:= uint64(2);p <= n;p++ { if((primes & (1 << p)) == 0){ fmt.Println("Current prime",p)
package main
import (
"fmt"
)
func primeset(n uint64) uint64 {
primes := uint64(0)
for p:= uint64(2);p <= n;p++ {
if((primes & (1 << p)) == 0){
fmt.Println("Current prime",p)
for j:=uint64(2)*p;j <=n;j=j+p {
fmt.Println("Current num:",j)
primes |= (1 << j)
fmt.Println("Bitset value is:",primes)
}
}
}
return primes
}
func main() {
n := uint64(100)
primes := primeset(n)
fmt.Println("Primes is",primes)
j := n
for j >= 2 {
s := primes & (1 << uint64(j))
if((s == 0) && ((n % j) == 0)){
fmt.Println("Largest factor",j)
return
} else {
j--
}
}
}
13195的主要因子为5、7、13和29。
数字600851475143中最大的素因子是什么
我试图通过以下方式解决这个问题:
package main
import (
"fmt"
)
func primeset(n uint64) uint64 {
primes := uint64(0)
for p:= uint64(2);p <= n;p++ {
if((primes & (1 << p)) == 0){
fmt.Println("Current prime",p)
for j:=uint64(2)*p;j <=n;j=j+p {
fmt.Println("Current num:",j)
primes |= (1 << j)
fmt.Println("Bitset value is:",primes)
}
}
}
return primes
}
func main() {
n := uint64(100)
primes := primeset(n)
fmt.Println("Primes is",primes)
j := n
for j >= 2 {
s := primes & (1 << uint64(j))
if((s == 0) && ((n % j) == 0)){
fmt.Println("Largest factor",j)
return
} else {
j--
}
}
}
有人能指出我执行位操作的方式有什么问题吗
谢谢
输出:
18446744073709551615
0 1
1 2
2 4
62 4611686018427387904
63 9223372036854775808
64 0
65 0
99 0
100 0
输出:
18446744073709551615
0 1
1 2
2 4
62 4611686018427387904
63 9223372036854775808
64 0
65 0
99 0
100 0
18446744073709551615
0 1
1 2
2 4
62 4611686018427387904
63 9223372036854775808
64 0
65 0
99 0
100 0