ABC227 C - ABC conjecture C++解答例
ABC227 C - ABC conjectureをC++で解きます。
問題
問題文をAtCoderのページより引用します。
問題文
正の整数
が与えられます。 N
かつ A \leq B \leq C であるような正の整数の組 ABC \leq N の個数を求めてください。 (A, B, C)
なお、制約の条件下で答えは未満であることが保証されます。 2^{63}
制約
1 \leq N \leq 10^{11} は整数である N
解答例
工夫した全探索で解く
正の整数の組
問題文の条件より、3つの数のうち一番小さい
したがって、
このことから、3つの数の積
これで
次に
したがって、
次に
ただし、
実装例
実際の実装例を以下に示します。
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
int main() {
int64_t N;
std::cin >> N;
int64_t count = 0;
// Aの値を全探索する
for (int64_t i = 1; i * i * i <= N; i++) {
// Bの値を全探索する
for (int64_t j = i; i * j * j <= N; j++) {
// AとBを決めればCが取れる値の場合の数が決まる
count += N / (i * j) - j + 1;
}
}
std::cout << count << std::endl;
return 0;
}
実際に提出したコードはこちら。
Discussion