C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で指定された数より大きい次の完全平方数を求める方法


整数 n が与えられたとき、n より大きい最小の完全平方数(ある整数の 2 乗で表される数)を求める問題を考えてみましょう。例えば、n = 1000 の場合、次の完全平方数は 32² = 1024 となります。

解法の考え方

この問題は、以下のシンプルな手順で解くことができます。

  1. 与えられた数 n の平方根を求める
  2. その値の小数点以下を切り捨てる(floor 処理)
  3. 切り捨てた値に 1 を加え、その 2 乗を計算して返す

n の平方根の整数部分を r とすると、r² ≤ n が成り立つため、n より大きい次の完全平方数は (r + 1)² となります。

C++での実装例

#include<iostream>
#include<cmath>
using namespace std;
int justGreaterPerfectSq(int n) {
    int sq_root = sqrt(n);
    return (sq_root + 1) * (sq_root + 1);
}
int main() {
    int n = 1000;
    cout << "Nearest perfect square: " << justGreaterPerfectSq(n);
}

実行結果

Nearest perfect square: 1024

計算量について

sqrt 関数を 1 回呼び出すだけで処理が完了するため、時間計算量は O(1)、空間計算量も O(1) と非常に効率的です。

注意点

非常に大きな数を扱う場合、浮動小数点演算の誤差により sqrt の結果が不正確になる可能性があります。そのようなケースでは、整数演算による二分探索や、誤差を考慮した補正処理を組み合わせると安全です。

  1. C++で与えられた点から作成できる四角形の数を求める方法

    四角形とは? 四角形(クアドララテラル)とは、ユークリッド平面上で4つの頂点と4つの辺を持つ多角形のことを指します。「4-gon」という呼び方もあり、正方形や長方形なども四角形の一種に含まれます。 本記事では、与えられた点から作成できる四角形の数を求める手法について解説します。この問題では、直交座標系(XY平面)上に与えられた4つの点 (x, y) を用いて、いくつの四角形を構成できるかを求めます。まず、具体的な入力例と出力例を見てみましょう。 入力 : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) 出力 : 1 説明 : 作成できる四角形は1つだ

  2. C++で文字列の順列の総数を求めるプログラムの作成方法

    文字列に含まれる文字は、さまざまな順序で並べ替えることができます。本記事では、与えられた文字列から作成できる順列の数を求める方法を解説します。たとえば「abc」という3文字の文字列の場合、並べ方は 3! = 6 通りあります。つまり、n 文字の文字列であれば、最大で n! 通りの並べ方が存在します。しかし、「aab」のように同じ文字が複数回含まれている場合、単純に 6 通りにはなりません。「aab」の全パターンを書き出してみると、次のようになります。abaaabbaabaaaababaこのうち、(1番目と6番目)、(2番目と5番目)、(3番目と4番目) のペアはそれぞれ同一の並び方です。したが