Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 구하는 수열 1, 17, 98, 354…의 n번째 항

문제 이해하기

주어진 수열은 1, 17, 98, 354...입니다.

이 수열을 자세히 관찰해 보면, n번째 항이 각 자연수의 4제곱 값들을 차례대로 더한 누적 합과 같다는 규칙을 발견할 수 있습니다.

패턴을 직접 확인해 보겠습니다.

1 = 1 ^ 4
17 = 1 ^ 4 + 2 ^ 4
98 = 1 ^ 4 + 2 ^ 4 + 3 ^ 4
354 = 1 ^ 4 + 2 ^ 4 + 3 ^ 4 + 4 ^ 4
...

알고리즘

  • 숫자 N을 초기화합니다.
  • 결과값을 0으로 초기화합니다.
  • 1부터 n까지 반복하는 루프를 작성합니다.
    • 현재 숫자의 4제곱 값을 결과에 더합니다.
  • 최종 결과를 출력합니다.

C++ 구현

다음은 위에서 설명한 알고리즘을 C++로 구현한 코드입니다.

#include <bits/stdc++.h>

using namespace std;

int getNthTerm(int n) {
    int nthTerm = 0;
    for (int i = 1; i <= n; i++) {
        nthTerm += i * i * i * i;
    }
    return nthTerm;
}

int main() {
    int n = 7;
    cout << getNthTerm(n) << endl;
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

4676

동작 원리 상세 분석

n = 7일 때의 계산 과정을 단계별로 살펴보면 다음과 같습니다.

1⁴ = 1
2⁴ = 16
3⁴ = 81
4⁴ = 256
5⁴ = 625
6⁴ = 1296
7⁴ = 2401

합계: 1 + 16 + 81 + 256 + 625 + 1296 + 2401 = 4676

이처럼 각 반복마다 현재 인덱스의 4제곱 값을 누적하는 방식으로, 시간 복잡도는 O(n)으로 매우 효율적으로 동작합니다. 만약 n이 매우 큰 경우에는 오버플로우를 방지하기 위해 long long 타입 사용을 고려하는 것이 좋습니다.