최솟값과 최댓값을 입력하고 ‘계산’을 누르면 그 범위의 난수를 생성합니다. 개수, 소수점 아래 자릿수, 중복 있음·없음도 지정할 수 있습니다(최솟값과 최댓값 외에는 비워 두어도 됩니다. 비워 두면 ‘정수 1개·중복 있음’입니다).
이 페이지에서 할 수 있는 것
- 최솟값과 최댓값만 넣으면 그 범위의 난수(무작위로 뽑힌 수)를 그 자리에서 만들 수 있습니다
- 정수뿐 아니라 소수의 난수도 만들 수 있습니다. 소수점 아래 자릿수는 0~50자리로 지정할 수 있습니다
- 한 번에 최대 999개까지 생성할 수 있고, 중복 ‘있음·없음’도 고를 수 있습니다. 2개 이상 만들면 생성한 순서와 함께 오름차순·내림차순으로 정렬한 결과도 동시에 표시합니다
- 1~6 같은 작은 범위부터 20자리가 넘는 아주 큰 정수까지 다룰 수 있습니다
- 난수의 원리에 대한 쉬운 해설과 Excel·Google 스프레드시트·Python에 복사해 쓸 수 있는 수식도 이 페이지에 모아 두었습니다
이 계산은 어디에 쓰일까요?
응모자나 학생에게 번호를 매기고 난수로 고르면 누구의 의도도 들어가지 않는 공정한 방법이 됩니다. 모두가 뽑힐 확률이 같으므로(균등분포) 수학적으로 공정함이 보장되는 추첨입니다.
로또 6/45가 ‘1~45 중 6개, 중복 없음’인 것도 바로 이 형식이며, 번호를 고르는 방법은 8,145,060가지(약 814만 가지)입니다.
‘국민 모두에게 묻지 않고 왜 수천 명의 조사로 여론을 알 수 있을까?’ 그 바탕이 조사 대상을 난수로 고르는 임의추출입니다. 일부러 고르면 결과가 치우치므로, 무작위로 뽑는 것이 조사의 신뢰성을 지탱합니다.
여론조사에서 쓰이는 RDD(임의 번호 걸기) 방식은 전화번호 자체를 난수로 만들어 거는 방법으로, 전화번호부에 실리지 않은 사람에게도 같은 확률로 전화가 가도록 합니다.
너무 복잡해서 식으로 풀 수 없는 문제라도 난수로 수만 번 시행해 결과를 모으면 답에 가까운 값을 얻을 수 있습니다. 이를 몬테카를로 방법이라고 하며, 금융 기관의 위험 계산, 앙상블 일기 예보(조건을 조금씩 바꾼 예보를 여러 번 계산하는 방법), 물리학·의학 연구까지 폭넓게 쓰입니다.
‘난수의 평균은 기댓값에 가까워진다’는, 이 페이지에서 배우는 성질이 그 이론적인 바탕입니다.
디지털 게임 속의 우연, 즉 주사위의 눈, 카드 섞기, 확률형 아이템(뽑기), 맵의 자동 생성은 모두 의사난수로 만들어집니다. 한국에서는 2024년 3월부터 게임산업법에 따라 확률형 아이템의 확률 공개가 의무화되었습니다.
‘시드가 같으면 같은 열이 재현된다’는 의사난수의 성질은 리플레이 기능이나 ‘같은 시드 값의 맵을 친구와 공유해서 즐기는’ 기능에 오히려 적극적으로 활용됩니다.
인터넷 쇼핑의 암호 통신도, 일회용 비밀번호(OTP)도 ‘공격자가 예측할 수 없는 수’, 즉 난수가 없으면 성립하지 않습니다.
여기서는 예측될 수 있는 보통의 의사난수를 쓸 수 없으므로, 암호학적으로 강화된 생성기나 열잡음 같은 물리 현상으로 만드는 하드웨어 난수를 씁니다. 난수의 품질이 세상의 안전을 좌우하는, 가장 엄격한 쓰임입니다.
공식
용어·기호 해설
기호
| \(a\) | 에이 | 난수 범위의 최솟값(이 수 이상)입니다. (예: 1~100의 난수라면 \(a = 1\)) |
| \(b\) | 비 | 난수 범위의 최댓값(이 수 이하)입니다. (예: 1~100의 난수라면 \(b = 100\)) |
| \(P(X=k)\) | 피 엑스 이퀄 케이 | 난수 \(X\)가 정확히 정수 \(k\)가 될 확률입니다. 정수의 균등 난수에서는 어느 \(k\)에서나 같은 값입니다. |
| \(f(x)\) | 에프 엑스(확률밀도) | 소수 난수가 ‘나오기 쉬운 정도’를 나타내는 그래프의 높이(확률밀도함수)입니다. 균등분포에서는 범위 안의 어디에서나 높이가 같습니다. |
| \(E[X]\) | 이 엑스(기댓값) | 난수 \(X\)를 많이 생성했을 때 평균이 가까워지는 값입니다. E는 기댓값을 뜻하는 영어 Expectation의 첫 글자입니다. |
| \(u\) | 유 | 0 이상 1 미만의 균등한 난수입니다. 컴퓨터 난수의 대부분은 먼저 이 꼴로 만들어진 뒤 원하는 범위로 변환됩니다. |
| \(\lfloor\ \rfloor\) | 바닥(바닥 함수) | 안에 있는 수의 소수점 아래를 버려 정수로 만드는 기호입니다. (예: \(\lfloor 3.2 \rfloor = 3\)) |
| \(X_n\) | 엑스 엔 | 의사난수 열의 \(n\)번째 값입니다. 처음 값 \(X_0\)이 시드(씨앗)입니다. |
| \(\bmod\) | 모드 | 나눈 나머지를 구하는 계산입니다. (예: \(38 \bmod 16 = 6\). 38을 16으로 나누면 몫 2, 나머지 6) |
용어
| 난수 | 주사위의 눈처럼 다음에 무엇이 나올지 예측할 수 있는 규칙이 없는 수입니다. 이 페이지의 생성기는 지정한 범위에서 무작위로 뽑힌 수를 만듭니다. |
| 균등분포 | 범위 안의 어느 값이나 같은 정도로 나오기 쉬운 분포입니다. 정수 난수라면 ‘어느 정수나 같은 확률’, 소수 난수라면 ‘그래프의 높이가 어디서나 같음’이 됩니다. |
| 의사난수 | 계산식으로 만드는 ‘난수처럼 보이는’ 수의 열입니다. 이를 만드는 장치를 영어로 PRNG(Pseudo Random Number Generator, 의사난수 생성기)라고 합니다. 컴퓨터의 난수는 거의 모두 이 의사난수입니다. |
| 시드 | 의사난수의 계산을 시작할 때의 처음 값입니다. 같은 시드에서 시작하면 완전히 같은 난수의 열이 재현됩니다. 보통은 시각 등으로 자동으로 정해지므로 매번 다른 열처럼 보입니다. |
| 선형 합동법 | ‘곱하고, 더하고, 나머지를 구하는’ 것을 되풀이하는, 의사난수를 만드는 가장 고전적인 방법입니다. 원리를 배우기에는 가장 좋지만, 지금의 실제 쓰임에서는 더 품질이 좋은 방식(메르센 트위스터 등)이 주류입니다. |
| 하드웨어 난수 | 주사위나 동전, 대기의 전기적 잡음, 전자 회로의 열잡음 같은 물리 현상으로 만드는 난수입니다. 계산식을 쓰지 않으므로 재현할 수 없고, ‘진짜 난수’에 가까운 것을 얻을 수 있습니다. |
| 기댓값 | 확률적으로 나오는 값을 ‘여러 번 되풀이했을 때의 평균’입니다. 균등 난수의 기댓값은 범위의 정확히 한가운데입니다. |
| 임의추출 (무작위 추출) | 조사 대상을 사람의 의도를 넣지 않고 난수 등으로 무작위로 고르는 것입니다. 통계 조사에서 치우침을 피하기 위한 기본 방법으로, 랜덤 샘플링이라고도 합니다. |
먼저 알아 두면 좋은 내용
이 페이지의 계산을 ‘의미를 알고’ 쓸 수 있도록, 먼저 알아 두면 좋은 내용을 정리했습니다.
| 나머지가 있는 나눗셈(초등학교 3학년, 8~9세) |
|
| 소수와 버림(초등학교 3~5학년, 8~11세) |
|
| 비율과 백분율(초등학교 6학년, 11~12세) |
|
| 확률의 기초(중학교 2학년, 13~14세) |
|
| 기댓값(고등학교, 15~18세) |
|
Excel로 계산하는 방법
| 최솟값 a | 1 |
| 최댓값 b | 6 |
| 각 정수가 나올 확률 | =1/(B2-B1+1) |
| 최솟값 a | 0 |
| 최댓값 b | 10 |
| 확률밀도(그래프의 높이) | =1/(B2-B1) |
| 최솟값 a | 1 |
| 최댓값 b | 100 |
| 난수의 평균(기댓값) | =(B1+B2)/2 |
| 최솟값 a | 1 |
| 최댓값 b | 100 |
| 정수 난수(다시 계산할 때마다 바뀜) | =B1+INT(RAND()*(B2-B1+1)) |
| 지금의 난수 Xn | 7 |
| 곱하는 수 a | 5 |
| 더하는 수 c | 3 |
| 나누는 수 m | 16 |
| 다음 난수 | =MOD(B2*B1+B3,B4) |
첫 번째 표는 약 0.1667(= 1/6), 세 번째 표는 50.5, 다섯 번째 표는 6이 표시됩니다.
네 번째 표의 RAND()는 ‘0 이상 1 미만의 난수’를 만드는 함수로, 공식 부분의 변환식을 그대로 옮긴 꼴입니다. F9 키를 누를 때마다 새로운 난수가 나옵니다.
참고로 정수 난수에는 Excel 전용 함수 =RANDBETWEEN(B1,B2)도 있어서, 같은 결과를 함수 하나로 얻을 수 있습니다.
Google 스프레드시트로 계산하는 방법
| 최솟값 a | 1 |
| 최댓값 b | 6 |
| 각 정수가 나올 확률 | =1/(B2-B1+1) |
| 최솟값 a | 0 |
| 최댓값 b | 10 |
| 확률밀도(그래프의 높이) | =1/(B2-B1) |
| 최솟값 a | 1 |
| 최댓값 b | 100 |
| 난수의 평균(기댓값) | =(B1+B2)/2 |
| 최솟값 a | 1 |
| 최댓값 b | 100 |
| 정수 난수(다시 계산할 때마다 바뀜) | =B1+INT(RAND()*(B2-B1+1)) |
| 지금의 난수 Xn | 7 |
| 곱하는 수 a | 5 |
| 더하는 수 c | 3 |
| 나누는 수 m | 16 |
| 다음 난수 | =MOD(B2*B1+B3,B4) |
표를 통째로 복사해 A1 셀에 붙여 넣고, 입력란의 숫자를 원하는 값으로 바꾸세요.
Python으로 계산하는 방법
import random
lower = 1 # 최솟값
upper = 100 # 최댓값
count = 5 # 생성할 개수
# 정수 난수(중복 있음)
integers = [random.randint(lower, upper) for _ in range(count)]
# 정수 난수(중복 없음)
unique_integers = random.sample(range(lower, upper + 1), count)
# 소수 난수
decimals = [random.uniform(lower, upper) for _ in range(count)]
print(f"정수 난수(중복 있음): {integers}")
print(f"정수 난수(중복 없음): {unique_integers}")
print(f"소수 난수: {decimals}")
# 시드를 고정하면 실행할 때마다 같은 열이 다시 나옵니다(의사난수의 성질)
random.seed(42)
print(f"시드 42로 만든 난수: {[random.randint(1, 100) for _ in range(3)]}")
LaTeX 등 수식 언어로 쓰는 법(복사 가능)
P(X = k) = 1 / (b − a + 1)
P(X = k) = \frac{1}{b - a + 1}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>P</mi><mo>(</mo><mi>X</mi><mo>=</mo><mi>k</mi><mo>)</mo>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mrow><mi>b</mi><mo>−</mo><mi>a</mi><mo>+</mo><mn>1</mn></mrow>
</mfrac>
</mrow>
</math>
P(X = k) = 1/(b - a + 1)
1/(b - a + 1)
p := 1/(b - a + 1);
p = 1/(b - a + 1);
P(X = k) = 1/(b - a + 1)
f(x) = 1 / (b − a)
f(x) = \frac{1}{b - a}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>f</mi><mo>(</mo><mi>x</mi><mo>)</mo>
<mo>=</mo>
<mfrac>
<mn>1</mn>
<mrow><mi>b</mi><mo>−</mo><mi>a</mi></mrow>
</mfrac>
</mrow>
</math>
f(x) = 1/(b - a)
1/(b - a)
f := 1/(b - a);
f = 1/(b - a);
f(x) = 1/(b - a)
E[X] = (a + b) / 2
E[X] = \frac{a + b}{2}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>E</mi><mo>[</mo><mi>X</mi><mo>]</mo>
<mo>=</mo>
<mfrac>
<mrow><mi>a</mi><mo>+</mo><mi>b</mi></mrow>
<mn>2</mn>
</mfrac>
</mrow>
</math>
E[X] = (a + b)/2
(a + b)/2
mean := (a + b)/2;
mean_x = (a + b)/2;
E[X] = (a + b)/2
n = a + ⌊u × (b − a + 1)⌋
n = a + \lfloor u \times (b - a + 1) \rfloor
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>n</mi>
<mo>=</mo>
<mi>a</mi>
<mo>+</mo>
<mo>⌊</mo>
<mi>u</mi>
<mo>×</mo>
<mo>(</mo><mi>b</mi><mo>−</mo><mi>a</mi><mo>+</mo><mn>1</mn><mo>)</mo>
<mo>⌋</mo>
</mrow>
</math>
n = a + |__ u xx (b - a + 1) __|
a + Floor[u*(b - a + 1)]
n := a + floor(u*(b - a + 1));
n = a + floor(u*(b - a + 1));
n = a + ⌊u × (b - a + 1)⌋
Xₙ₊₁ = (a·Xₙ + c) mod m
X_{n+1} = (a X_n + c) \bmod m
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>X</mi><mrow><mi>n</mi><mo>+</mo><mn>1</mn></mrow></msub>
<mo>=</mo>
<mo>(</mo>
<mi>a</mi><msub><mi>X</mi><mi>n</mi></msub>
<mo>+</mo><mi>c</mi>
<mo>)</mo>
<mo>mod</mo>
<mi>m</mi>
</mrow>
</math>
X_(n+1) = (a X_n + c) mod m
Mod[a*x + c, m]
X[n + 1] := (a*X[n] + c) mod m;
x_next = mod(a*x + c, m);
X_(n+1) = (a X_n + c) mod m
ChatGPT 에게 물어서 계산하는 방법
당신은 난수 생성 도우미입니다. 다음 작업을 Python 코드를 실제로 실행해서 하고, 실행 결과의 숫자만을 근거로 답하세요(난수는 코드를 실행하지 않고는 만들 수 없으므로, 숫자를 추측하거나 지어내지 마세요). 1. 1~100의 정수 난수를 중복 없이 5개 생성하세요. 2. 그 5개를 오름차순으로 정렬하세요. 3. 0.2~112.5의 소수 난수를 소수점 아래 3자리로 1개 생성하세요. 사용한 코드와 실행 결과의 숫자를 보여 주세요.
사용법
-
1숫자 입력계산하고 싶은 숫자를 입력란에 입력합니다
-
2계산‘계산’ 버튼을 누릅니다
-
3결과 확인계산 결과가 바로 표시됩니다. 계산의 원리와 공식 해설도 같은 페이지에서 확인할 수 있습니다
DataChef의 특징
전문 지식 없이도 직관적이고 간단하게 사용
개인정보를 등록하지 않고도 이용할 수 있습니다
"다운로드"를 누르면 파일이 자동으로 삭제됩니다
출처 표기 불필요
상업적 이용 허가 연락도 필요 없습니다