Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未为数字golang设置位_Go_Bit Manipulation_Primes - Fatal编程技术网

未为数字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)

我试图在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)
            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