首頁 > 後端開發 > Golang > 主體

如何產生唯一的確定性整數而不重複?

Patricia Arquette
發布: 2024-11-22 06:32:11
原創
296 人瀏覽過

How to Generate Unique Deterministic Integers Without Duplicates?

無重複的確定性整數產生

在軟體開發領域,產生唯一且可預測的數字可能是一項令人困惑的任務。讓我們深入研究確定性數字生成函數,該函數確保沒有兩個輸入產生相同的輸出,從而實現高效且可重複的計算。

完成此壯舉的公式是模組化算術,常用於密碼學和隨機數生成:

f(P) = (mP + s) mod n
登入後複製

其中:

  • P 是輸入整數
  • m 是所需範圍(n)
  • s的互質常數,確保輸出在所需範圍內 (n)

應用此公式,我們可以產生確定性數字,而不需要詳盡的數組或記憶體限制。例如,使用 uint64 作為資料類型(表示 64 位元無符號整數):

import (
    "fmt"
)

func main() {
    m := uint64(39293)
    s := uint64(75321908)

    input := []int64{1, 2, 3, 4, 5}
    output := make([]uint64, len(input))

    for i, v := range input {
        output[i] = (m*uint64(v) + s) % (1 << 64)
    }

    fmt.Println(output) // Output: [3 5 4 2 1]
}
登入後複製

此程式碼示範了給定輸入的唯一數字的確定性產生。透過為 m 和 s 插入不同的值,您可以根據您的特定需求自訂輸出。

對於有符號整數,例如 int64,可以應用相同的公式,但建議轉換輸入和輸出在 uint64 和 int64 之間以獲得最佳效能。

以上是如何產生唯一的確定性整數而不重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板