안녕하세요! 어젯밤 재미삼아 이 간단한 소수 격자 시각화 툴을 만들었음. 며칠 전에 우연히 발견한 "Show HN" 게시글에서 영감을 받았음. Miller-Rabin 소수 판별법을 사용하고, OEIS 시퀀스 A014233에 나온 소수를 베이스로 삼아 3317044064679887385961980까지도 소수 판별 가능함. 예시로 이 링크를 참고할 수 있음. 거기에서 보이는 세 개의 원은 아래 소수를 의미함:
3317044064679887385961783
3317044064679887385961801
3317044064679887385961813
이게 여러분에게도 재미를 주길 바람
시각화 정말 멋짐! 마우스를 점 위에 올렸을 때 어떤 소수인지 알려주는 기능이 추가되면 좋겠음. 그리고 각 행마다 열의 개수를 X씩 늘리면(혹은 X를 소수로 하거나) 새로운 패턴이 관찰될지 궁금함
만들어줘서 고마움! 열 개수를 빠르게 올려가며 반복되는 패턴, 작은 소용돌이 움직임이나 크게 휘어지는 선들을 발견하는 게 정말 재미있음. 어렸을 때 수학의 논리 퍼즐 요소를 정말 좋아했는데, 고등학교 후반부와 대학에서 수학이 점점 더 추상적으로 다가오면서 어렵게 느껴졌었음. 이렇게 시각화해주는 도구가 있었으면 수학적 개념을 더 구체적으로 느끼고 수식 뒤에 숨겨진 관계에 계속 호기심을 가졌을 것 같음
숫자 진법을 16이나 다른 진법으로 바꿔볼 수 있는 기능도 있다면 정말 흥미로울 것 같음. 어떤 패턴 변화가 생길지 너무 궁금해짐
너무 멋짐! 너가 만든 걸 보고 나도 패턴을 직접 찾아보겠다고 시각적으로 엄청 파고들었음 :D 근데 열과 행을 마음대로 정렬할 수 있으니 결국 내 시도는 별 의미가 없었던 것 같음 :D
이상한 방식 하나 소개함: 정수를 100개씩 묶은 pack 단위로 봄. pack 안에 소수가 있으면 검은색, 없으면 빨간색으로 칠함. 첫 pack에는 100개의 연속된 정수가, 두 번째에는 두 수마다 하나씩, 세 번째에는 세 수마다 하나씩 등등 들어감. 각 pack은 이전 pack이 끝난 곳에서 이어서 시작함. 1행에는 pack 하나, 2행에는 두 개, 3행에는 세 개... 이런 식임. 여기에 그림 있음. 마치 다른 우주의 상형문자처럼 보임. 왜 이렇게 생기는지 아직 잘 모름. 랜덤 분포와 비교하려면 코드를 이렇게 바꿔볼 수 있음:
if (isPrime(myNum)) return 1;
를
if (Math.random()>0.99) return 1;
로 바꿔보면 확연히 다름. 소수 기반 패턴의 대칭성과 성질이 도대체 어디서 온 건지 정말 궁금함
이 댓글이 그림에 대한 설명을 잘 해줌. 본질적으로는 gcd(x,y)를 시각화한 것이고, 소수와 거의 상관없음. 이 사실을 알면 많은 패턴의 원인을 더 쉽게 이해할 수 있음. 그래도 정말 흥미로운 시각화임
설명이 링크된 코드와 조금 다름. N번째 pack이 N씩 떨어진 정수로 채워지는 게 아니라, N번째 행의 각 pack마다 N씩 떨어진 정수를 포함하고 있음. 예를 들어 두 번째 행의 첫 번째 pack은 {101, 103, 105, ..., 299}, 두 번째 pack은 {102, 104, 106, ..., 300} 임. 이런 원리를 이해하면 패턴이 이 댓글에서 잘 설명됨
이 아이디어에 꽤 빠져들었음. 처음에는 Ulam 나선이라고 쉽게 연결될 줄 알았는데, 이쪽 rabbit hole은 다항식 잔여와 신비로운 "Conjecture F"에 닿음(설명). parallax primes는 이 링크에서 더 자세한 설명과 관련된 배경 지식, 특히 이 페이지에서 기하학적으로 해석되는 부분이 특히 만족스러웠음
이런 방식으로 가지고 놀아봤음: 예시. 짝수 또는 홀수 pack만 반복하면 패턴이 실제로 수렴하는 걸 발견함. 정말 신기함
Ulam 나선도 한번 그려보는 걸 제안하고 싶음 Ulam spiral wiki. 그리고 만약 이게 Conway의 생명 게임(Game of Life)의 초기 상태라면, 흥미로운 패턴이 진화할지 정말 궁금함. 다양한 크기의 시작 격자를 brute-force로 돌려보면 몇 스텝 이상 유지되는 게임을 골라 사람이 직접 관찰할 수도 있을 거라 생각함. 혹시 소수의 특정 작은 격자 또는 나선이 특별한 무언가를 발생시키면 HN이 들썩일지도 모르겠음
완전히 같은 건 아니지만, 10여 년 전에 만들어본 Ulam 나선 생성기가 있음. 링크. 이건 소수만 찍는 게 아니라, 각 위치의 숫자가 가진 짝수인 약수의 개수에 따라 점 크기가 결정됨
Ulam 나선에 한 표를 더 보냄. 처음에 왜 대각선이 안 보이는지 의아했음. 원래 Ulam 나선을 예상했었음
소수는 실제로 점점 더 찾기 힘들어짐. 예를 들어 모든 소수를 한 행에 그려보면 그 차이를 확실히 볼 수 있음(여기 참고). 정수론에서 유명한 소수정리(Prime number theorem)도 이걸 다루고 있음. n 이하의 소수 개수는 n/log n에 근사하고, n 근처의 소수 밀도는 1/log n에 수렴함. 내 소수정리 설명과 위키피디아도 참고할 수 있음
대부분 사람들이 그렇게 생각함. 소수를 찾기 어렵다고 배우기 때문이라고 봄. 사실 소수를 찾는 건 어렵지 않음. 우리가 생각하기에 인티저가 소수인지 판별하는 게 어렵게 느껴지는 것 뿐임. 사실 제곱수보다 소수가 더 많음
cols(열) 값이 소수가 되면 패턴이 멋지게 드러남
columns가 소수 p가 되면 각 열의 숫자가 p로 나눈 나머지가 똑같아짐. 그래서 p의 배수가 소수가 아니게 되면서 대각선 패턴이 생기게 됨
열이 소수라기보단 cols+1 또는 cols-1이 약수가 많을 때(예: 25, 91, 119)에도 흥미로운 패턴이 나옴. 소수 근처의 숫자들이 약수가 많은 것도 흥미로움
열이 7일 때 오른쪽 위에서 왼쪽 아래로 가는 대각선이 많이 보이고, 열이 5일 때는 왼쪽 위에서 오른쪽 아래로. 연속된 sexy prime의 빈도도 궁금함. 큰 숫자에서는 이 패턴이 깨질지 알고 싶음
cols % 30 == 0 (30, 60, 90, 120 등)일 때의 패턴이 정말 흥미로움. 직선 세로줄이 뚜렷함. 1만 더하거나 빼면(119나 121) 줄이 왼쪽 또는 오른쪽으로 “회전”하는 것처럼 보임. 정말 멋진 시각화 도구임
보이는 대부분의 패턴은 사실 소수 특성이 아님. 처음 100개의 자연수로 나누어 떨어지지 않는 수만 표시해도 거의 비슷한 그림이 나옴
최근에 나도 소수 시각화 툴을 만들어봄: https://ilmenit.github.io/prime-fold/
시각화뿐만 아니라 진화 알고리즘과 피트니스 함수로 소수를 생성하거나 포함하는 수학 함수를 찾아내는 도구임.
PrimeFold 모드(2D 임베딩): f_x(n), f_y(n) 두 함수를 입력하거나 진화시켜서 숫자를 2D 좌표로 매핑함. 소수와 합성수를 다르게 시각화함. 예: f_x(n) = n, f_y(n) = n^2.
PrimeGen 모드(1D 생성): f(n) 하나만 입력하거나 진화시켜서 숫자 시퀀스를 만듦. 각 출력값이 소수인지와 고유 소수 개수를 시각화해줌. 예: f(n) = 2*n + 1
이 링크에서 zoom out 하고 cols 값을 하나씩 늘리고 줄여 보면 패턴 변화가 관찰됨. -7부터 +5까지의 변화가 인상적임. #1-200-420에서도 동일함
심심풀이로 python으로 연속된 소수의 일의 자리 수(10진법)를 비교해 본 결과 흥미로운 관계를 발견함. 2랑 5는 한번씩만 등장하니 제외하고, 1->3, 1->5, ... 등 각 자리수간 이동을 빈도로 세어 봤음. 소수는 무작위라고 생각해서 거의 빈도가 같을 거라 생각했으나, 오히려 통계적으로 유의미한 차이가 있었음. 왜 그런지는 아직 아무도 모름
내 직감으로는 소수가 훨씬 더 드물고, 숫자가 커질수록 그 감소율도 훨씬 빠르다고 생각했으나, 실제로는 여전히 엄청 많음. [1, 10,000, 10,000]에서도 아래쪽은 꽤 촘촘함. 물론 덜 촘촘해지긴 함. 평균 소수 간격은 log(n)임 (prime number theorem)
Hacker News 의견
안녕하세요! 어젯밤 재미삼아 이 간단한 소수 격자 시각화 툴을 만들었음. 며칠 전에 우연히 발견한 "Show HN" 게시글에서 영감을 받았음. Miller-Rabin 소수 판별법을 사용하고, OEIS 시퀀스 A014233에 나온 소수를 베이스로 삼아 3317044064679887385961980까지도 소수 판별 가능함. 예시로 이 링크를 참고할 수 있음. 거기에서 보이는 세 개의 원은 아래 소수를 의미함: 3317044064679887385961783
3317044064679887385961801
3317044064679887385961813
이게 여러분에게도 재미를 주길 바람
시각화 정말 멋짐! 마우스를 점 위에 올렸을 때 어떤 소수인지 알려주는 기능이 추가되면 좋겠음. 그리고 각 행마다 열의 개수를 X씩 늘리면(혹은 X를 소수로 하거나) 새로운 패턴이 관찰될지 궁금함
만들어줘서 고마움! 열 개수를 빠르게 올려가며 반복되는 패턴, 작은 소용돌이 움직임이나 크게 휘어지는 선들을 발견하는 게 정말 재미있음. 어렸을 때 수학의 논리 퍼즐 요소를 정말 좋아했는데, 고등학교 후반부와 대학에서 수학이 점점 더 추상적으로 다가오면서 어렵게 느껴졌었음. 이렇게 시각화해주는 도구가 있었으면 수학적 개념을 더 구체적으로 느끼고 수식 뒤에 숨겨진 관계에 계속 호기심을 가졌을 것 같음
숫자 진법을 16이나 다른 진법으로 바꿔볼 수 있는 기능도 있다면 정말 흥미로울 것 같음. 어떤 패턴 변화가 생길지 너무 궁금해짐
너무 멋짐! 너가 만든 걸 보고 나도 패턴을 직접 찾아보겠다고 시각적으로 엄청 파고들었음 :D 근데 열과 행을 마음대로 정렬할 수 있으니 결국 내 시도는 별 의미가 없었던 것 같음 :D
이상한 방식 하나 소개함: 정수를 100개씩 묶은 pack 단위로 봄. pack 안에 소수가 있으면 검은색, 없으면 빨간색으로 칠함. 첫 pack에는 100개의 연속된 정수가, 두 번째에는 두 수마다 하나씩, 세 번째에는 세 수마다 하나씩 등등 들어감. 각 pack은 이전 pack이 끝난 곳에서 이어서 시작함. 1행에는 pack 하나, 2행에는 두 개, 3행에는 세 개... 이런 식임. 여기에 그림 있음. 마치 다른 우주의 상형문자처럼 보임. 왜 이렇게 생기는지 아직 잘 모름. 랜덤 분포와 비교하려면 코드를 이렇게 바꿔볼 수 있음: if (isPrime(myNum)) return 1; 를 if (Math.random()>0.99) return 1; 로 바꿔보면 확연히 다름. 소수 기반 패턴의 대칭성과 성질이 도대체 어디서 온 건지 정말 궁금함
이 댓글이 그림에 대한 설명을 잘 해줌. 본질적으로는 gcd(x,y)를 시각화한 것이고, 소수와 거의 상관없음. 이 사실을 알면 많은 패턴의 원인을 더 쉽게 이해할 수 있음. 그래도 정말 흥미로운 시각화임
설명이 링크된 코드와 조금 다름. N번째 pack이 N씩 떨어진 정수로 채워지는 게 아니라, N번째 행의 각 pack마다 N씩 떨어진 정수를 포함하고 있음. 예를 들어 두 번째 행의 첫 번째 pack은 {101, 103, 105, ..., 299}, 두 번째 pack은 {102, 104, 106, ..., 300} 임. 이런 원리를 이해하면 패턴이 이 댓글에서 잘 설명됨
이 아이디어에 꽤 빠져들었음. 처음에는 Ulam 나선이라고 쉽게 연결될 줄 알았는데, 이쪽 rabbit hole은 다항식 잔여와 신비로운 "Conjecture F"에 닿음(설명). parallax primes는 이 링크에서 더 자세한 설명과 관련된 배경 지식, 특히 이 페이지에서 기하학적으로 해석되는 부분이 특히 만족스러웠음
이런 방식으로 가지고 놀아봤음: 예시. 짝수 또는 홀수 pack만 반복하면 패턴이 실제로 수렴하는 걸 발견함. 정말 신기함
Ulam 나선도 한번 그려보는 걸 제안하고 싶음 Ulam spiral wiki. 그리고 만약 이게 Conway의 생명 게임(Game of Life)의 초기 상태라면, 흥미로운 패턴이 진화할지 정말 궁금함. 다양한 크기의 시작 격자를 brute-force로 돌려보면 몇 스텝 이상 유지되는 게임을 골라 사람이 직접 관찰할 수도 있을 거라 생각함. 혹시 소수의 특정 작은 격자 또는 나선이 특별한 무언가를 발생시키면 HN이 들썩일지도 모르겠음
완전히 같은 건 아니지만, 10여 년 전에 만들어본 Ulam 나선 생성기가 있음. 링크. 이건 소수만 찍는 게 아니라, 각 위치의 숫자가 가진 짝수인 약수의 개수에 따라 점 크기가 결정됨
Ulam 나선에 한 표를 더 보냄. 처음에 왜 대각선이 안 보이는지 의아했음. 원래 Ulam 나선을 예상했었음
또다른 Ulam spiral 도구
소수에 대한 내 직관은 정말 빨리 희귀해진다고 생각했는데, 실제로는 소수가 엄청 많음
소수는 실제로 점점 더 찾기 힘들어짐. 예를 들어 모든 소수를 한 행에 그려보면 그 차이를 확실히 볼 수 있음(여기 참고). 정수론에서 유명한 소수정리(Prime number theorem)도 이걸 다루고 있음. n 이하의 소수 개수는 n/log n에 근사하고, n 근처의 소수 밀도는 1/log n에 수렴함. 내 소수정리 설명과 위키피디아도 참고할 수 있음
이 주제는 정말 많은 연구가 이루어졌음 위키피디아
대부분 사람들이 그렇게 생각함. 소수를 찾기 어렵다고 배우기 때문이라고 봄. 사실 소수를 찾는 건 어렵지 않음. 우리가 생각하기에 인티저가 소수인지 판별하는 게 어렵게 느껴지는 것 뿐임. 사실 제곱수보다 소수가 더 많음
cols(열) 값이 소수가 되면 패턴이 멋지게 드러남
columns가 소수 p가 되면 각 열의 숫자가 p로 나눈 나머지가 똑같아짐. 그래서 p의 배수가 소수가 아니게 되면서 대각선 패턴이 생기게 됨
열이 소수라기보단 cols+1 또는 cols-1이 약수가 많을 때(예: 25, 91, 119)에도 흥미로운 패턴이 나옴. 소수 근처의 숫자들이 약수가 많은 것도 흥미로움
열이 7일 때 오른쪽 위에서 왼쪽 아래로 가는 대각선이 많이 보이고, 열이 5일 때는 왼쪽 위에서 오른쪽 아래로. 연속된 sexy prime의 빈도도 궁금함. 큰 숫자에서는 이 패턴이 깨질지 알고 싶음
cols % 30 == 0 (30, 60, 90, 120 등)일 때의 패턴이 정말 흥미로움. 직선 세로줄이 뚜렷함. 1만 더하거나 빼면(119나 121) 줄이 왼쪽 또는 오른쪽으로 “회전”하는 것처럼 보임. 정말 멋진 시각화 도구임
보이는 대부분의 패턴은 사실 소수 특성이 아님. 처음 100개의 자연수로 나누어 떨어지지 않는 수만 표시해도 거의 비슷한 그림이 나옴
최근에 나도 소수 시각화 툴을 만들어봄:
https://ilmenit.github.io/prime-fold/
시각화뿐만 아니라 진화 알고리즘과 피트니스 함수로 소수를 생성하거나 포함하는 수학 함수를 찾아내는 도구임.
PrimeFold 모드(2D 임베딩): f_x(n), f_y(n) 두 함수를 입력하거나 진화시켜서 숫자를 2D 좌표로 매핑함. 소수와 합성수를 다르게 시각화함. 예: f_x(n) = n, f_y(n) = n^2.
PrimeGen 모드(1D 생성): f(n) 하나만 입력하거나 진화시켜서 숫자 시퀀스를 만듦. 각 출력값이 소수인지와 고유 소수 개수를 시각화해줌. 예: f(n) = 2*n + 1
1, 7, 100으로 설정하면 스타게이트의 체브론(chevron)처럼 별자리 틱커테이프를 보는 느낌임 :D
이 링크에서 zoom out 하고 cols 값을 하나씩 늘리고 줄여 보면 패턴 변화가 관찰됨. -7부터 +5까지의 변화가 인상적임. #1-200-420에서도 동일함
심심풀이로 python으로 연속된 소수의 일의 자리 수(10진법)를 비교해 본 결과 흥미로운 관계를 발견함. 2랑 5는 한번씩만 등장하니 제외하고, 1->3, 1->5, ... 등 각 자리수간 이동을 빈도로 세어 봤음. 소수는 무작위라고 생각해서 거의 빈도가 같을 거라 생각했으나, 오히려 통계적으로 유의미한 차이가 있었음. 왜 그런지는 아직 아무도 모름
내 직감으로는 소수가 훨씬 더 드물고, 숫자가 커질수록 그 감소율도 훨씬 빠르다고 생각했으나, 실제로는 여전히 엄청 많음. [1, 10,000, 10,000]에서도 아래쪽은 꽤 촘촘함. 물론 덜 촘촘해지긴 함. 평균 소수 간격은
log(n)임 (prime number theorem)