
수학에서는 끊임없는 탐구와 질문이 이어지곤 합니다. 그리고 그 탐구의 발판이 되는 것이 바로 추측입니다. 추측은 어떤 수학적 성질이 일정한 범위 또는 특정 조건에서 참이라고 생각되지만 아직 증명되지 않은 주장입니다.
예를 들어 골드바흐의 추측이 있죠. 골드바흐의 추측은 수학의 유명한 미해결 문제 중 하나로, 독일의 수학자 크리스티안 골드바흐(Christian Goldbach) 가 1742년에 처음 제시했습니다. 이 추측은 간단하면서도 아름답게 표현됩니다.
(
보다 크거나 같은) 모든 짝수는 두 소수의 합으로 표현할 수 있다.
쉽게말해 어떤 짝수
이러한 조합은 꽤 큰 수에서도 잘 맞아 떨어집니다.
1938년 닐스 피핑(Nils Pipping)은 수작업으로
모래알 한 개의 길이는
라 가정하고, 개의 모래알을 나열하면
지구의 둘레는 약이므로
골드바흐의 추측은 수백 년 동안 수많은 수학자들에게 도전의 기회를 제공했으며, 많은 짝수에 대해 실험적으로 검증되었습니다. 그렇다면 이렇게 큰 수까지 증명되면 참이라고 할 수 있을까요?
폴리아 추측(Pólya conjecture)
폴리아 추측은 조지 폴리아(George Pólya)가 1919년에 제시한 수학적 가설로, 소수론과 관련이 깊은 내용입니다. 이 추측은 자연수를 소인수의 개수에 따라 두 그룹으로 나누는 방식과 관련이 있습니다. 구체적으로, 폴리아 추측은 어떤 자연수
자세히 보도록 하겠습니다. 예를들어
앞서 본 표에서 규칙성을 보면 소수들은 홀수개의 성분으로 소인수 분해되고, 짝수개의 성분으로 소인수분해 되는 수와 홀수개의 성분으로 소인수분해 되는 수들의 개수가 앞으로도 비슷하다고 생각한다면 더 큰 수들도 조사해보았을 때 홀수개의 성분으로 소인수 분해되는 수가 항상 더 많을 것이라 생각할 수도 있습니다.
이 추측은 리우빌 함수(Liouville function)
따라서 폴리아 추측은 다음과 같이 정의된
모든 정수는 소수들의 곱으로 유일하게 표현될 수 있으며, 리우빌 함수는 이 소수들의 거듭제곱 지수를 통해 값을 결정하기 때문에, 서로소인 두 수의 소인수분해는 서로 영향을 주지 않아, 이들의 리우빌 함수 값의 곱은 각각의 리우빌 함수 값과 동일합니다. 따라서 리우빌 함수는 서로소인 두 정수
두 서로소인 양의 정수
와 에 대하여 와 가 공통된 소인수를 가지지 않으므로, 는 와 의 합과 같다.
리우빌 함수의 정의에 따라
이고, 지수 법칙을 이용해 정리하면
다음과 같다.
이를 이용해 python코드를 작성하여 간단하게

쏟아지는 반례들
1958년 해즐그로브(C. B. Haselgrove)는 자신의 논문에서 폴리아의 추측이
리만 가설에서 영점들이
In the present paper we shall describe calculations which lead to the result that
. We have not found a smaller value of for which the conjecture fails, but also we have not proved that this is the smallest greater than for which is positive 본 논문에서 우리는
이라는 결과로 이어지는 계산을 설명할 것입니다. 우리는 추측이 실패하는 더 작은 값을 찾지 못했으며, 가 양수인 보다 큰 가장 작은 가 이것임을 증명하지도 못했습니다.
이후 1980년에 이르러 타나카(Minoru Tanaka)가


여러 연구 결과를 통해
억까지의 수 중 을 만족하는 개의 목록
추측 너머에
반례들은 진리를 향한 여정에서 중요한 이정표입니다. 폴리아의 추측이 틀렸다는 사실은 많은 경우에서의 진실성이 전체를 대변하지 않음을 보여주며, 특정 사례에서의 진실이 일반화될 수 없다는 중요한 교훈을 제시합니다. 그러나 이 추측을 통해 얻을 수 있는 것은 이러한 단순한 교훈뿐만이 아닙니다. 수학은 해답도 중요하지만 어쩌면 그 과정이 더 중요하다 생각합니다. 폴리아가 이 추측을 제시한 것은 정말 이 명제가 참이라고 생각해서 그런 것은 아니었습니다. 사실은 정반대 였죠. 폴리아는 이 명제가 참이라고 생각하지 않았습니다. 이 명제를 증명한 과정에서 보듯 이 추측의 본 목적은 리만 가설과 같은 깊은 수학적 문제에 대한 탐구를 촉진하고자 함이었습니다. 폴리아의 추측은 결코 오류를 의미하는 것이 아니라, 리만 가설이라는 미지의 세계로 나아가는 도전의 초대장이었습니다. 폴리아는 이 문제를 제기하고 해결함에 있어 수학의 새로운 분야를 개척할 수 있다고 생각했습니다.
골드바흐의 추측과 폴리아의 문제는 모두 수학 탐구의 본질을 반영합니다. 수학의 발전은 귀납적 추론을 통한 문제 발견과 연역적 과정을 통한 증명의 순환 속에서 이루어집니다. 수학은 끊임없는 탐구와 물음, 그리고 불확실성 속에서도 지식의 빛을 발견하는 여정입니다. 아직 해결되지 않은 추측은 아직 펼쳐지지 않은 수학의 무한한 가능성과 진리를 밝히기위한 불빛입니다. 그렇다면 여러분이 밝혀낼 다음 진리는 무엇인가요?
import csv
from sympy import factorint
def liouville_function(n):
# 리우빌 함수는 소인수의 지수의 합이 홀수면 -1, 짝수면 +1을 반환합니다.
return (-1)**sum(factorint(n).values())
def find_last_calculated(output_file):
try:
with open(output_file, 'r', newline='') as file:
# 파일의 행 수를 세어 마지막으로 계산된 n 값을 추정합니다.
row_count = sum(1 for row in file)
return row_count if row_count > 0 else None
except FileNotFoundError:
return None
def calculate_liouville_values(start, end, output_file):
last_calculated = find_last_calculated(output_file)
if last_calculated is not None:
start = last_calculated + 1
with open(output_file, 'a', newline='') as output:
writer = csv.writer(output)
if last_calculated is None:
writer.writerow(['Lambda(n)'])
for n in range(start, end + 1):
liouville_value = liouville_function(n)
writer.writerow([liouville_value])
def main():
start = 2
end = 10**9
output_filename = 'lambda.csv'
calculate_liouville_values(start, end, output_filename)
if __name__ == "__main__":
main()
import csv
def calculate_cumulative_sum(input_file, output_file):
cumulative_sum = 0
with open(input_file, 'r') as input_csv, open(output_file, 'w', newline='') as output_csv:
reader = csv.reader(input_csv)
writer = csv.writer(output_csv)
header = next(reader)
writer.writerow(['L(x)'])
for row in reader:
liouville_value = int(row[0])
cumulative_sum += liouville_value
writer.writerow([cumulative_sum])
def main():
input_filename = 'lambda.csv'
output_filename = 'L(x).csv'
calculate_cumulative_sum(input_filename, output_filename)
if __name__ == "__main__":
main()
import matplotlib.pyplot as plt
import csv
from itertools import islice
def plot_liouville_partial(filename, start, end, step=1):
L_x_values = []
x_indices = []
with open(filename, "r") as csvfile:
csvreader = csv.reader(csvfile)
next(csvreader)
for i, row in enumerate(islice(csvreader, start - 2, end - 1, step)):
actual_row_number = start + i * step
x_indices.append(actual_row_number)
L_x_values.append(int(row[0]))
plt.figure(figsize=(16, 9))
plt.plot(x_indices, L_x_values, linewidth=1, color="#004D81")
plt.title(f"L(x) from {start} to {end} (every {step}th data)")
plt.xlabel("n")
plt.ylabel("L(x)")
plt.grid(True)
plt.show()
filename = 'L(x).csv'
plot_liouville_partial(filename, 9 * 10**8, 10**9)
import os
def count_rows_in_csv(file_path):
count = 0
with open(file_path, 'r', encoding='utf-8') as file:
for _ in file:
count += 1
return count
def count_rows_in_multiple_csv(file_list):
row_counts = {}
for file_path in file_list:
row_counts[file_path] = count_rows_in_csv(file_path)
return row_counts
file_list = ['lambda.csv', 'L(x).csv']
# 여러 파일의 행 수를 계산합니다.
row_counts = count_rows_in_multiple_csv(file_list)
# 결과 출력
for file_path, count in row_counts.items():
print(f"{file_path}: {count}")
[^1]: A disproof of a conjecture of Pólya - Haselgrove - 1958
[^2]: On Liouville's Function By R. Sherman Lehman
[^3]: A Numerical Investigation on Cumulative Sum of the Liouville Function
You know what's cooler than magic? Math.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!