크리스티안 골드바흐는 모든 홀수인 합성수를 (소수 + 2×제곱수)로 나타낼 수 있다고 주장했습니다. 9 = 7 + 2×12 이 추측은 잘못되었음이 밝혀졌습니다. 위와 같은 방법으로 나타낼 수 없는 가장 작은 홀수 합성수는 얼마입니까? |
합성수를 소수로 + 2 x 제곱수로 나타내는 증명이 잘못 되었음을 밝히기 위해선 크게 2가지 과정이 필요하다 생각했습니다.
첫 째, 합성수 셋을 만든다.
둘 째, 주어진 합성수를 특정 조건에 대입하여 거짓인지 증명한다.
합성수의 조건은 "소수가 아니며, 모두 홀수이어야 한다" 이고, 그 증명 방법에는 합성수를 만들때 사용한 합성수 이하 범위를 가지는 소수들과 제곱수를 합성수와 비교하면 됩니다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | def isPrime(target): i=2 while i<target: if target % i == 0: return False i+=1 return True def makeOddCompositeNumbersAndPrimeNumber(start, stop): numbers = range(start, stop) compositeNumbers = numbers primeNumbers = [] for number in numbers: if isPrime(number): compositeNumbers.remove(number) primeNumbers.append(number) oddCompositeNumbers = [] for compositeNumber in compositeNumbers: if compositeNumber % 2 == 1: oddCompositeNumbers.append(compositeNumber) return oddCompositeNumbers, primeNumbers def proveOpinion(targets, primeSet): for target in targets: flag = False for prime in primeSet: i = 1 if prime < target: while(True): opinion = prime + 2 * i ** 2 if opinion == target: print target, " = ", prime, " + 2 x ", i, "**2" flag = True break elif opinion > target: break i+=1 elif prime > target: print "prime is ", prime, " / target is ", target return target if flag: break oddCompositeNumbers, primeNumbers = makeOddCompositeNumbersAndPrimeNumber(3, 10000) print proveOpinion(oddCompositeNumbers, primeNumbers) | cs |
...
5765 = 563 + 2 x 51 **2
5767 = 149 + 2 x 53 **2
5769 = 151 + 2 x 53 **2
5771 = 569 + 2 x 51 **2
5773 = 571 + 2 x 51 **2
5775 = 157 + 2 x 53 **2
prime is 5779 / target is 5777
5777
'* Computer Science > Project Euler' 카테고리의 다른 글
project euler 52. problem (0) | 2016.11.14 |
---|---|
project euler 41.problem (0) | 2016.10.20 |
project euler 44. problem (0) | 2016.10.18 |
project euler 37. problem (0) | 2016.10.13 |
project euler 43. problem (0) | 2016.10.05 |