> 백엔드 개발 > Golang > 다른 정수에서 고유한 결정적 정수를 생성하는 방법은 무엇입니까?

다른 정수에서 고유한 결정적 정수를 생성하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-11-21 06:15:09
원래의
991명이 탐색했습니다.

How to Generate Unique Deterministic Integers from Another Integer?

다른 정수에서 고유한 결정적 정수 생성

결정적 숫자 생성 함수를 만들기 위한 탐구에서 우리의 목표는 각 입력 숫자가 고유한 해당 숫자를 생성하는 함수를 구성하는 것입니다. 중복 없는 숫자.

모듈식 연산 솔루션:

기발한 솔루션은 모듈식 연산, 특히 Affine 암호에 있습니다. 변환 공식을 사용합니다.

f(P) = (mP + s) mod n
로그인 후 복사

여기서:

  • n은 허용되는 정수 값의 범위를 나타냅니다(예: uint64의 경우 2^64)
  • s는 범위보다 작은 임의의 이동 값입니다.
  • m은 n이 있는 서로소(공약수 없음)입니다

uint64 범위의 경우 m에 짝수가 아닌 값이 제안됩니다. 2로 나누어지는 것을 방지합니다.

구현 예:

import (
    "fmt"
)

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

    transform := func(p uint64) uint64 {
        return p * m + s
    }

    testValues := []uint64{1, 2, 3, 4, 5}
    for _, v := range testValues {
        fmt.Printf("%v -> %v\n", v, transform(v))
    }
}
로그인 후 복사

이 함수는 가능한 모든 uint64 입력 값에 대해 생성된 변환 값이 고유하도록 보장합니다.

부호 있는 정수에 대한 조정:

부호 있는 정수(int64)의 경우 접근 방식은 유사하게 유지됩니다. 고유한 매핑을 유지하기 위해 uint64와 int64 사이의 입력과 출력을 변환합니다.

func signedTransform(p int64) int64 {
    return int64(transform(uint64(p)))
}
로그인 후 복사

이 결정적 기능을 활용하여 개발자는 주어진 입력 정수에서 고유하고 재현 가능한 숫자를 생성할 수 있으므로 다양한 애플리케이션을 위한 귀중한 도구가 됩니다. .

위 내용은 다른 정수에서 고유한 결정적 정수를 생성하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿