반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코딩
- 버전관리
- 클라우드컴퓨팅
- 인공지능
- 소프트웨어공학
- 웹개발
- 자료구조
- 소프트웨어
- 컴퓨터과학
- 컴퓨터공학
- 프로그래밍언어
- 머신러닝
- 자바스크립트
- 파이썬
- 데이터베이스
- 네트워크
- 네트워크보안
- 2
- 딥러닝
- 빅데이터
- 프로그래밍
- 데이터분석
- 데이터과학
- 알고리즘
- 컴퓨터비전
- 데이터구조
- 보안
- I'm Sorry
- Yes
- 사이버보안
Archives
- Today
- Total
스택큐힙리스트
숫자를 2개의 소수 공약수로 분해하십시오. 본문
반응형
텔레그램 인증에 대한 요구 사항 중 하나는 지정된 숫자를 2개의 소인수로 분해하는 것입니다. 특히 P*Q = N, where N < 2^63
입니다.
작은 소인수를 어떻게 찾을 수 있을까요? P < square_root(N)
나의 제안:
1) 3에서 2^31.5
까지의 소수를 사전 계산하여 N mod P = 0
인지 테스트합니다.
2) 소수를 테스트하기 위한 알고리즘을 찾습니다. 그러나 여전히 N mod P =0
를 테스트해야 합니다.
이 경우에 적합한 소수 알고리즘이 있을까요?
답변 1
폴라드 로 알고리즘 [VB.Net]
N < 2^63
인 경우, P*Q = N
을 매우 빠르게 찾습니다.
Dim rnd As New System.Random
Function 폴라드로(n As BigInteger) As BigInteger
If n Mod 2 = 0 Then Return 2
Dim x As BigInteger = rnd.Next(1, 1000)
Dim c As BigInteger = rnd.Next(1, 1000)
Dim g As BigInteger = 1
Dim y = x
While g = 1
x = ((x * x) Mod n + c) Mod n
y = ((y * y) Mod n + c) Mod n
y = ((y * y) Mod n + c) Mod n
g = gcd(BigInteger.Abs(x - y), n)
End While
Return g
End Function
Function 최대공약수(a As BigInteger, b As BigInteger) As BigInteger
Dim r As BigInteger
While b <> 0
r = a Mod b
a = b
b = r
End While
Return a
End Function
리처드 브렌트의 알고리즘 [VB.Net] 이것은 더욱 빠릅니다.
함수 Brent(n As BigInteger) As BigInteger
만약 n Mod 2 = 0 이면 2를 반환
Dim y As BigInteger = rnd.Next(1, 1000)
Dim c As BigInteger = rnd.Next(1, 1000)
Dim m As BigInteger = rnd.Next(1, 1000)
Dim g As BigInteger = 1
Dim r As BigInteger = 1
Dim q As BigInteger = 1
Dim x As BigInteger = 0
Dim ys As BigInteger = 0
반복 동안 g = 1
x = y
1부터 r까지 i에 대해
y = ((y * y) Mod n + c) Mod n
Next
Dim k = New BigInteger(0)
반복 동안 (k < r 이고 g = 1)
ys = y
1부터 BigInteger.Min(m, r - k)까지 i에 대해
y = ((y * y) Mod n + c) Mod n
q = q * (BigInteger.Abs(x - y)) Mod n
Next
g = 최대공약수(q, n)
k = k + m
End While
r = r * 2
End While
만약 g = n 이면
계속해서
ys = ((ys * ys) Mod n + c) Mod n
g = 최대공약수(BigInteger.Abs(x - ys), n)
만약 g > 1 이면
종료
End If
End While
End If
반환 g
End Function
답변 2
키워드: 숫자 분해, 소인수분해, 소수 공약수, SEO, 한국어 에세이제목: 숫자 분해: 2개의 소수 공약수로 분해하기
서문:
숫자 분해는 수학적인 작업으로, 주어진 수를 소수의 곱으로 나타내는 과정입니다. 이 에세이에서는 숫자 분해의 한 가지 유형인 소인수분해를 다루겠습니다. 소인수분해는 숫자를 2개의 소수 공약수로 쪼개어 표현하는 것으로, 수의 특정한 특성을 파악하거나 문제를 해결하는 데 도움이 됩니다.
본문:
소인수분해는 주어진 수를 가장 작은 소수부터 시작하여 나누는 과정을 통해 이루어집니다. 이러한 방식은 수를 더 작고 간단한 소수로 변환하여 문제를 해결하는 데 도움이 됩니다. 다음은 소인수분해의 예시입니다.
예를 들어, 숫자 72를 소인수분해 해보겠습니다. 가장 작은 소수인 2로 나눌 수 있을 때까지 계속 나누어 보면 다음과 같습니다.
72 ÷ 2 = 36
36 ÷ 2 = 18
18 ÷ 2 = 9
9 ÷ 3 = 3
72는 2 x 2 x 2 x 3로 나타낼 수 있습니다. 이는 2와 3이 72의 소수 공약수라는 것을 의미합니다. 따라서, 72를 2개의 소수 공약수로 분해한 결과는 2 x 2 x 2 x 3입니다.
이러한 소인수분해는 수의 특정한 특성을 파악하고, 문제를 간단하게 해결하는 데 사용될 수 있습니다. 예를 들어, 소인수분해를 통해 소인수의 개수를 세어 소수인지 아닌지 확인할 수 있습니다. 소인수분해는 또한 최대공약수나 최소공배수를 계산하는 데에도 사용됩니다.
결론:
숫자 분해는 주어진 수를 2개의 소수 공약수로 분해하는 과정입니다. 이렇게 숫자를 소인수분해하면 문제를 더 간단하게 해결하거나 수의 특성을 파악하는 데 도움이 됩니다. 소인수분해는 최대공약수, 최소공배수 등의 계산을 포함한 다양한 수학적 문제에 활용될 수 있습니다. 숫자 분해를 통해 소수의 특징을 이해하고, 수학적 문제를 더욱 쉽게 해결할 수 있습니다.
키워드: 숫자 분해, 소인수분해, 소수 공약수, SEO, 한국어 에세이
반응형
Comments