제곱 숫자 는 n^2
n이 정수인 형식입니다 . 이것을 제곱근이라고도합니다. 왜냐하면 제곱근을 취하면 정수가되기 때문입니다.
처음 10 개의 제곱 숫자는 다음과 같습니다. ( OEIS )
0, 1, 4, 9, 16, 25, 36, 49, 64, 81
삼각형 숫자 는 정삼각형을 형성 할 수 있는 숫자입니다. n 번째 삼각형 수는 1에서 n까지의 모든 자연수의 합과 같습니다.
처음 10 개의 삼각형 숫자는 다음과 같습니다. ( OEIS )
0, 1, 3, 6, 10, 15, 21, 28, 36, 45
정사각형 삼각형 숫자 는 정사각형과 삼각형 모두의 숫자입니다.
처음 10 제곱 삼각 숫자는 다음과 같습니다. ( OEIS )
0, 1, 36, 1225, 41616, 1413721, 48024900, 1631432881, 55420693056, 1882672131025, 63955431761796
무한한 수의 제곱 수, 삼각형 수 및 제곱 삼각 숫자가 있습니다.
입력 (매개 변수 또는 stdin) 숫자가 주어진 프로그램 또는 명명 된 함수를 작성하고 n
, n
제곱 삼각형 숫자를 계산 하고 출력 / 반환합니다. 여기서 n은 0이 아닌 양의 숫자입니다. (n = 1 인 경우 0을 반환)
프로그램 / 함수가 유효한 제출이 되려면 적어도 2 ^ 31-1보다 작은 모든 정사각형 삼각형 숫자를 반환 할 수 있어야합니다.
보너스
2 ^ 63-1 미만의 모든 정사각형 삼각형 숫자를 출력 할 수있는 -4 바이트
이론적으로 모든 크기의 정사각형 삼각형 수를 출력 할 수있는 -4 바이트
비 다항식 시간이 걸리는 솔루션에 +8 바이트 페널티.
보너스 스택.
이것은 코드 골프 챌린지이므로 가장 적은 바이트를 가진 답이 이깁니다.
답변
CJam, 12 8 바이트
XUri{_34*@-Y+}*;
Wikipedia 기사의 반복 관계를 사용합니다.
코드 길이는 16 바이트이며 두 보너스를 모두 충족합니다.
CJam 통역사 에서 온라인으로 사용해보십시오 .
작동 원리
내 코드는 변수 대신 CJam의 스택을 사용한다는 점을 제외하고는 항상 모든 측면에서 xnor의 코드와 동일한 것으로 나타났습니다.
XU e# Push 1 and 0 on the stack.
e# Since 34 * 0 - 1 + 2 = 1, this compensates for 1-based indexing.
ri{ }* e# Do int(input()) times:
_34* e# Copy the topmost integer and multiply it by 34.
@- e# Subtract the bottommost integer from the result.
Y+ e# Add 2.
; e# Discard the last result.
답변
파이썬 2, 45-4-4 = 37
a=1;b=0
exec"a,b=b,34*b-a+2;"*input()
print a
재귀를 사용하여 반복
f(0) = 1
f(1) = 0
f(k) = 34*f(k-1)-f(k-2)+2
이론적으로 이것은 모든 크기의 숫자를 지원하지만 기하 급수적으로 실행되므로 보너스를받을 수 없습니다. 어떤 크기의 숫자에서도 작동합니다. 예를 들어 100의 경우
1185827220993342542557325920096705939276583904852110550753333094088280194260929920844987597980616456388639477930416411849864965254621398934978872054025
재귀 솔루션은 41자를 사용하지만 지수 시간이 걸리기 때문에 자격이 없어야합니다.
f=lambda k:k>2and 34*f(k-1)-f(k-2)+2or~-k
답변
Pyth, 16-4-4 = 8 바이트
OEIS 기사의 재귀 수식을 사용합니다.
K1uhh-*34G~KGtQZ
꽤 새롭고 정말 멋진 사후 할당 명령을 사용합니다. n-1
1 기반 인덱싱으로 인해 반복 사용 시간이 줄어 듭니다 .
K1 Set K=1
u tQ Reduce input()-1 times
Z With zero as base case
hh +2
- Subtract
*34G 34 times iterating variable
~K Assign to K and use old value
G Assign the iterating variable.
n 번 반복되고 각 반복마다 수학 및 대입을 수행하기 때문에 다항식처럼 보이지만 컴퓨터 과학자는 아닙니다. n = 10000을 거의 즉시 완료합니다.
답변
오아시스 , 7-4-4 = -1 (비경쟁)
34*c-»T
용도 a(0) = 0, a(1) = 1; for n >= 2, a(n) = 34 * a(n-1) - a(n-2) + 2
Oasis는 임의의 정밀 정수를 지원하므로 스택 오버플로가 발생하지 않는 한 임의의 숫자까지 올라갈 수 있습니다. 스택 오버플로로 인해 보너스로 계산되지 않는 경우 알려주십시오. 이 특정 알고리즘이 다항식이 아닌 경우도있을 수 있습니다.
언어는 날짜가 어려워 경쟁이되지 않습니다.
설명:
34*c-»T -> 34*c-»10
a(0) = 0
a(1) = 1
a(n) = 34*c-»
34*c-»
34* # 34*a(n-1)
c- # 34*a(n-1)-a(n-2)
» # 34*a(n-1)-a(n-2)+2
대체 솔루션 :
-35*d+T
대신에 a(n) = 35*(a(n-1)-a(n-2)) + a(n-3)
답변
자바 스크립트 (ES6), 29-4 = 25 바이트
n=>n>1?34*f(n-1)-f(n-2)+2:n|0
@IsmaelMiguel 덕분에 5 바이트를 절약했습니다 !
무한 재귀를 피하기 위해 0, 1 및 음수를 하드 코딩해야했습니다.
콘솔, 함수의 이름을 다음과 f
같이 지정했습니다 .
f(1); // 0
f(13); // 73804512832419600
f(30); // 7.885505171090779e+42 or 7885505171090779000000000000000000000000000
편집 : JavaScript가 숫자를 16 (15) 자릿수 (사양)로 반올림하면 숫자가 너무 커서 오버플로가 발생합니다. JavaScript 콘솔에 714341252076979033을 넣고 직접 찾으십시오. JavaScript의 한계가 있습니다.
답변
Excel VBA-90 바이트
Wikipedia 페이지에서 되풀이 관계 사용 :
n = InputBox("n")
x = 0
y = 1
For i = 1 To n
Cells(i, 1) = x
r = 34 * y - x + 2
x = y
y = r
Next i
실행되면 n을 입력하라는 프롬프트가 표시되고 n까지의 시퀀스가 열 A에 출력됩니다.
오버플로 오류가 발생하기 전에 n = 202까지 실행할 수 있습니다.
답변
[경쟁 불가] Pyth (14-4-4 = 6 바이트)
K1u/^tG2~KGQ36
OEIS 에서 첫 번째 반복을 사용 했는데, 0,1,36 후에 A n = (A n-1 -1) 2 / A n-2를 찾을 수 있습니다. A이 솔루션은 36에서 시작하기 때문에 경쟁하지 않습니다. 더 낮아지면 0으로 나눕니다 (따라서 0을 입력하면 36이됩니다). 또한 36을 하드 코딩해야했습니다.