第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

未為數(shù)字 golang 設(shè)置位

未為數(shù)字 golang 設(shè)置位

Go
大話西游666 2021-09-27 17:30:03
我正在嘗試在 golang 中解決項目euler問題 3:問題如下:13195 的質(zhì)因數(shù)是 5、7、13 和 29。數(shù) 600851475143 的最大質(zhì)因數(shù)是多少?我試圖解決它如下:package mainimport (    "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--        }    }}在函數(shù) 'primeset' 中,我從一個名為 'primes' 的無符號整數(shù)開始,初始值為 0,然后左移一個數(shù)字(它是一個復(fù)合數(shù))并將 'primes' 的那個位設(shè)置為 1。這個想法是我只需檢查“素數(shù)”的第 4 位,看看它是否已設(shè)置。如果該位已設(shè)置,則它不是質(zhì)數(shù)。對于小數(shù)字,代碼似乎可以工作,但是當(dāng)我開始測試諸如 100 之類的數(shù)字時,突然之間事情變得相當(dāng)奇怪。我注意到在嘗試將其設(shè)置為第 62 位時,位移位不起作用。以下跟蹤可以演示這種情況:Current num: 48Bitset value is: 375299968947536Current num: 50Bitset value is: 1501199875790160Current num: 52Bitset value is: 6004799503160656Current num: 54Bitset value is: 24019198012642640Current num: 56Bitset value is: 96076792050570576Current num: 58Bitset value is: 384307168202282320Current num: 60Bitset value is: 1537228672809129296Current num: 62Bitset value is: 6148914691236517200Current num: 64Bitset value is: 6148914691236517200Current num: 66Bitset value is: 6148914691236517200Current num: 68Bitset value is: 6148914691236517200Current num: 70Bitset value is: 6148914691236517200Current num: 72Bitset value is: 6148914691236517200Current num: 74Bitset value is: 6148914691236517200Current num: 76Bitset value is: 6148914691236517200Current num: 78有人可以指出我執(zhí)行位操作的方式可能有什么問題嗎?
查看完整描述

1 回答

?
RISEBY

TA貢獻1856條經(jīng)驗 獲得超5個贊

Go 編程語言規(guī)范

算術(shù)運算符

<<   left shift             integer << unsigned integer
>>   right shift            integer >> unsigned integer

移位運算符將左操作數(shù)移位右操作數(shù)指定的移位計數(shù)。如果左操作數(shù)是有符號整數(shù),則它們實現(xiàn)算術(shù)移位,如果它是無符號整數(shù),則它們實現(xiàn)邏輯移位。班次計數(shù)沒有上限。移位的行為就像左操作數(shù)被移位 n 次,移位計數(shù)為 n。

您正在從 64 位的末尾移出位:(1<<p)where p > 63。例如,


package main


import (

    "fmt"

)


func main() {

    primes := ^uint64(0)

    fmt.Println(primes)

    for _, p := range []uint64{0, 1, 2, 62, 63, 64, 65, 99, 100} {

        fmt.Println(p, "\t", primes&(1<<p))

    }

}

輸出:


18446744073709551615

0    1

1    2

2    4

62   4611686018427387904

63   9223372036854775808

64   0

65   0

99   0

100  0


查看完整回答
反對 回復(fù) 2021-09-27
  • 1 回答
  • 0 關(guān)注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號