公式

B - Sum of Geometric Series 解説 by cn449


実際に \(X\) の値を計算し、\(X \leq 10^9\) かどうか判定すればよいです。

ただし、\(X\) の値は C++ における long long のような 64bit 整数の範囲では表現できないことに注意してください。

これを回避するためには、多倍長整数を用いるか、\(N^0, N^1, \ldots, N^M\) を順番に足す操作を \(10^9\) を超えた時点で打ち切るとよいです。

実装例 (Python)

N, M = map(int, input().split())
X = sum(N ** i for i in range(M + 1))
print(X if X <= 10 ** 9 else "inf")

実装例 (C++)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
	ll n, m;
	cin >> n >> m;
	ll cur = 1, sum = 0;
	for (int i = 0; i <= m; i++) {
		sum += cur;
		if (sum > 1'000'000'000) {
			cout << "inf\n";
			return 0;
		}
		cur *= n;
	}
	cout << sum << '\n';
}

投稿日時:
最終更新: