본문 바로가기

디지털포렌식(Digital forensic)/숫자

[파일 공개] 로또 모든 번호 리스트

반응형


아래 첨부한 파일은 180Mb 크기의 텍스트 파일로 생성 가능한 모든 로또번호가
리스트 되어있다. ZIP파일로 압축해서 19Mb로 만들어져있다.
메모장으로 열어도 열리긴 하지만 메모리에 부담되니
UltraEdit와 같은 텍스트 전문 파일편집기로 여는 편을 추천한다.


술에 관한 궁금증 101가지 기업강의
https://brunch.co.kr/@sample

 

안산술공방 이정욱의 브런치스토리

안산술공방 출간작가 | 고려대학교 대학원 졸업, 고대병원 연구교수, 의학(내분비), 약물학,신경심리학, 진화학, 의과학, 제어공학 and 예술. 선택당하는 삶과 선택하는 삶

brunch.co.kr

만듦: 디지털암호학 전문가 이정욱 교수

소스코드를 포함하여 허가없는 배포는 불법입니다. 
기업보안, 복권확률분석, 게임수학, 디지털암호학, 디지털공학, 전자수학공학

combinations.zip
19.16MB


위에 첨부한 전체 로또번호를 만드는 프로그램의 코드는 C#으로 만들었으며

본문의 하단에 첨부했다.



너무나 잘 알고 계시겠지만 로또는 45개의 숫자들 중에서 6개 숫자를 선택해서 추첨되면 상금을 지급받는 복권이다.

1부터 45까지의 숫자 중에서 랜덤으로 6개가 선택될 확률을 계산하려면, 이항 분포(Binomial Distribution)를 사용한다.
로또에서는 1부터 45까지의 숫자 중 6개를 맞추는 것이 목표이므로 각 번호를 선택하는 것은 독립적인 사건이 되며,
각 번호가 선택될 확률은 1/45이다.

이때, 6개의 번호를 맞추는 확률은 다음과 같이 계산된다.

(1/45) * (1/44) * (1/43) * (1/42) * (1/41) * (1/40) = 1 / (45 * 44 * 43 * 42 * 41 * 40)

이를 계산하면  1 / (45 * 44 * 43 * 42 * 41 * 40) ≈ 1.65406913e-12

결과를 백분율로 나타내기 위해서는 100을 곱해준다.
그렇게하면 약간의 오차는 있지만 다음과 같이 계산된다.

1.65406913e-12 * 100 ≈ 0.0000000001654%

로또 1등의 확률은 약 0.0000000001654%이다.



8,145,060 팔백십사만오천육십개의 숫자가 있다.
1부터 45까지의 숫자들을 무작위가 아닌!
순서대로 6개를 리스트로 만들었다.

 

 

using System;
using System.IO;

class Program
{
    static void Main()
    {
        int[] numbers = new int[45];
        for (int i = 0; i < 45; i++)
        {
            numbers[i] = i + 1;
        }

        int[] combination = new int[6];
        GenerateCombinations(numbers, combination, 0, 0);
    }

    static void GenerateCombinations(int[] numbers, int[] combination, int currentIndex, int currentCombinationIndex)
    {
        if (currentCombinationIndex == combination.Length)
        {
            SaveCombinationToFile(combination);
            return;
        }

        if (currentIndex >= numbers.Length)
        {
            return;
        }

        combination[currentCombinationIndex] = numbers[currentIndex];
        GenerateCombinations(numbers, combination, currentIndex + 1, currentCombinationIndex + 1);
        GenerateCombinations(numbers, combination, currentIndex + 1, currentCombinationIndex);
    }

    static void SaveCombinationToFile(int[] combination)
    {
        string combinationText = string.Join(", ", combination);
        using (StreamWriter sw = File.AppendText("combinations.txt"))
        {
            sw.WriteLine(combinationText);
        }
    }
}

 

 

728x90