Collatz 시퀀스 는, 양의 정수로 시작이 예를 들어 우리가 10를 사용하고, 그것에 단계의 설정을 적용 할 경우 (도 3 배 + 1 문제라고합니다)입니다 :
if n is even:
Divide it by 2
if n is odd:
Multiply it by 3 and add 1
repeat until n = 1
10은 짝수이므로 2로 나누어 5를 구합니다. 5는 홀수이므로 3을 곱하고 1을 더하여 16을 구합니다. 16은 짝수이므로 8을 반으로 자르면 8이됩니다. 4는 2, 2의 절반은 1입니다.이 과정에서 6 단계를 수행 했으므로 10의 정지 거리는 6입니다.
Super Collatz 숫자는 정지 거리가 그보다 작은 모든 숫자의 정지 거리보다 큰 숫자입니다. 예를 들어, 6의 정지 거리는 8, 5의 정지 거리는 5, 4는 2, 3은 7, 2는 1, 1은 0을 갖기 때문에 6은 Super Collatz 수 입니다. (OEIS의 A006877 ) 숫자 n 을 입력으로 취하고 모든 Super Collatz 숫자를 n 까지 출력하십시오 .
규칙
전체 프로그램 또는 기능이 허용됩니다.
Super Collatz 시퀀스를 사전 계산하거나 하드 코딩 할 수 없습니다.
합리적인 형식으로 입력 할 수 있습니다.
출력은 함수에서 목록으로 리턴되거나 STDOUT 또는 파일로 인쇄 될 수 있습니다. 가장 편리한 방법입니다.
유효하지 않은 입력 (숫자, 소수, 음수 등)으로 인해 정의되지 않은 동작이 발생합니다.
ungolfed python 샘플
def collatzDist(n):
if n == 1:
return 0
if n % 2 == 0:
return 1 + collatzDist(n / 2)
return 1 + collatzDist((n * 3) + 1)
n = input()
max = -1
superCollatz = []
for i in range(1, n + 1):
dist = collatzDist(i)
if dist > max:
superCollatz.append(i)
max = dist
print superCollatz
샘플 IO :
#in #out
4 --> 1, 2, 3
50 --> 1, 2, 3, 6, 7, 9, 18, 25, 27
0 --> invalid
10000 --> 1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171
또한 첫 44 개의 Super Collatz 번호가 있습니다 :
1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239, 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935, 626331, 837799