C++

 Computer >> コンピューター >  >> プログラミング >> C++
  1. 【C++】巨大な数が8で割り切れるかどうかを判定する方法

    本記事では、非常に大きな数が8で割り切れるかどうかを判定する方法を解説します。判定対象となる数は非常に大きいため、通常の整数型では扱えず、文字列として受け取って処理します。 ある数が8で割り切れるかどうかは、下3桁で作られる数が8で割り切れるかどうかだけで判断できます。これは、1000が8の倍数であることから導かれる性質です。1000より上の位の部分は必ず8の倍数になるため、下3桁だけを確認すれば十分です。 アルゴリズムの手順 判定は以下の手順で行います。 1. 数値を文字列として受け取る 2. 文字列の末尾3文字を取り出し、それぞれの文字を数値に変換して整数値を組み立てる 3. その値を8

  2. C++で巨大な数値が9で割り切れるかどうかを判定する方法

    本記事では、ある数値が9で割り切れるかどうかを判定する方法を解説します。対象となる数値は非常に大きいため、通常の整数型では扱いきれず、文字列として受け取る必要があります。9の倍数の判定ルール数学でよく知られた性質として、「各桁の数字の合計が9で割り切れるならば、その数自身も9で割り切れる」というものがあります。この性質を利用すれば、どれほど巨大な数値でも、文字列として各桁を処理するだけで簡単に判定できます。アルゴリズムの手順数値を文字列として受け取る各桁の数字をすべて合計する合計が9で割り切れれば「割り切れる」、そうでなければ「割り切れない」と判定するC++による実装例#include <

  3. C++で線分が原点を通るかどうかを判定する方法

    この記事では、与えられた線分が原点(0, 0)を通過するかどうかをC++で判定する方法を解説します。判定には、線分の両端を表す2つの座標点を使用します。判定の考え方アプローチは非常にシンプルです。まず2つの座標点から直線の方程式を導き、そこに (0, 0) を代入します。その結果、方程式が成立すれば、その直線は原点を通過していると判断できます。2点をそれぞれ (x₁, y₁) と (x₂, y₂) とすると、この2点を通る直線の方程式は次のように表されます。$$y-y_{1}=\left(\frac{y_{2}-y_{1}}{x_{2}-x_{1}}\right)*\lgroup x-x_{1

  4. C++で整数Nが2^x + 2^yの形で表現できるかを判定する方法

    この記事では、与えられた整数Nが、2つの0でない2の冪の和――すなわち 2x + 2y(x, y > 0)――の形で表現できるかどうかを判定する方法を解説します。例えば10は 23 + 21 = 8 + 2 と表せるため、条件を満たします。 考え方:数の偶奇に着目する 判定のアプローチは非常にシンプルで、次の2つのケースに分けて考えます。 Nが偶数の場合:2の冪の和として表現できると判定します。偶数は 2x(x > 0)の形で扱うことができます。 Nが奇数の場合:表現できません。x, y > 0 の制約下では 2x も 2y も必ず偶数になるため、その和も必然的に偶数になり

  5. C++で数値が連続する整数の和として表現できるか判定する方法

    この記事では、ある数値が2つ以上の連続する整数の和として表現できるかどうかを判定する方法を解説します。例えば、12は「3 + 4 + 5」のように表現できます。 この問題には、非常にシンプルで効率的な解法があります。鍵となるのは次の性質です。「2の累乗である数は、連続する整数の和として表現できない」というものです。この性質を理解するために、以下の2つの事実を押さえておきましょう。 任意の2つの連続する整数の和は必ず奇数になります。これは、一方が奇数でもう一方が偶数であるためです。 2n = 2(n-1) + 2(n-1) という関係が常に成り立ちます。 これらの事実から、2の累乗は1以外の

  6. C++で数値がa^b(累乗)の形で表現できるかどうかを判定する方法

    本記事では、与えられた数値が ab のような累乗の形式で表現できるかどうかを判定する方法を解説します。例えば、125 は 53 と表現できます。一方、91 はいかなる整数の累乗としても表現できません。アルゴリズム基本的な考え方は次の通りです。数値が 1 であれば常に真を返し、それ以外の場合は底となる候補 i を 2 から順に試していきます。対数の性質を利用して「i を何乗すると num になるか」を計算し、その結果がほぼ整数であれば、num は i の累乗として表現できると判断できます。isRepresentPower(num): Begin if num = 1, then retu

  7. 【C++】数値が累乗(a^b)として表現できるかどうかを判定する方法

    この記事では、与えられた数値が ab(a・b は整数)という累乗の形で表現できるかどうかを判定する方法を解説します。例えば、125 という数値は 53 と表現できるため「表現可能」です。一方、91 はいかなる整数の累乗としても表現できません。アルゴリズムの考え方判定には対数(log)を利用します。底となる候補 i を 2 から順に試し、「i を何乗すると num になるか」を log(num) / log(i) で計算します。この値がほぼ整数であれば、num は ival と表現できることになります。isRepresentPower(num): 開始   もし num = 1 ならば true

  8. C++で数値がx^y(累乗)として表現できるかどうかを判定する方法

    この記事では、ある数値が xy のような累乗の形で表現できるかどうかを判定する方法を解説します。例えば、125 という数値は 53 と表現できます。一方、91 のような数値は、いかなる整数の累乗としても表現できません。アルゴリズムの考え方判定の基本的なアイデアは次のとおりです。底となる候補 i を 2 から順に試し、log(num) / log(i) を計算します。この結果がほぼ整数になれば、num は i の累乗として表せることになります。isRepresentPower(num): Begin if num = 1, then return true for i := 2,

  9. C++で数値が2つの三角数の和として表現できるか判定する方法

    本記事では、ある整数が2つの三角数の和として表現できるかどうかを判定する方法を、C++のコード例とともに分かりやすく解説します。三角数とは三角数とは、1、3、6、10、15…のように、1から順に自然数を加算して得られる数列のことです。点を正三角形の形に並べたときの個数に対応することから「三角数」と呼ばれています。n番目の三角数は次の式で求められます。n × (n + 1) / 2例えば、1、3、6、10などが三角数に該当します。これらを利用すると、16は「6 + 10」という2つの三角数の和として表現できます。判定アルゴリズム判定の手順は非常にシンプルです。N未満のすべての三角数を生成し、セッ

  10. C++で数値が2つの非ゼロの2の累乗の和として表せるか判定する方法

    本記事では、ある整数Nを「2つの非ゼロの2の累乗の和」、すなわち 2x + 2y(x, y > 0)という形で表すことができるかどうかを判定する方法を解説します。例えば 10 は 23 + 21 と表せるため、条件を満たします。 考え方:偶奇に着目する 2の累乗(21, 22, 23, …)はすべて偶数なので、その和も必ず偶数になります。この性質から、次のように判定できます。 Nが奇数の場合: 表現することはできません。奇数の2進表現は最下位ビット(LSB)が必ず1になるためです。 Nが偶数の場合: 表現できる可能性があります。最下位ビットが0かどうかをビット演算で調べるだけで簡単に

  11. C++で数値が3つの連続する整数の和として表現できるか判定する方法

    本記事では、ある数値が「3つの連続する整数の和」として表現できるかどうかを判定する方法を解説します。例えば、27という数値は 8 + 9 + 10 のように、3つの連続する整数の合計として書き表すことができます。 問題を解く2つのアプローチ この問題には、大きく分けて2つの解き方があります。 1. 単純なアプローチ(ナイーブ法) 最初の方法は最も直感的なものです。i + (i + 1) + (i + 2) を計算し、それが対象の数値と一致するかどうかを順番に確認していきます。ただし、この方法では候補を一つずつ調べる必要があるため、数値が大きい場合には非効率になります。 2. 効率的なアプローチ

  12. C++である数値のセットビットと未セットビットの数が同じかどうかを判定する方法

    この記事では、ある整数の2進数表現において、セットビット(1となっているビット)と未セットビット(0となっているビット)の数が同じかどうかを判定する方法を解説します。例として、数値12を考えてみましょう。12の2進数表現は「1100」です。この中には1が2つ、0が2つ含まれており、セットビットと未セットビットの数が一致しています。アルゴリズムの考え方アプローチは非常にシンプルです。以下の手順で判定を行います。数値の最下位ビットから順に、1ビットずつ値を調べます。調べたビットが1であればセットビットのカウンター(set_count)を、0であれば未セットビットのカウンター(unset_count

  13. C++で数値に連続するセットビット(隣接する1)があるかどうかを判定する方法

    ここでは、ある整数の2進表現の中に「隣接するセットビット」(連続した1)が存在するかどうかを判定する方法を解説します。たとえば、数値12は2進数で「1100」と表され、上位2桁に連続する1が含まれています。判定の考え方この判定は、ビットシフトとAND演算(論理積)を組み合わせることで、非常にシンプルに実現できます。手順は以下のとおりです。対象の数値 n を1ビット右シフトする(n >> 1)。これにより、各ビットがひとつ隣の桁へ移動します。元の数値 n とシフト後の値との間でビットごとのAND(n & (n >> 1))を計算します。計算結果が0以外であれば連続

  14. C++で数値がミステリーナンバーかどうかを判定する方法

    ミステリーナンバーとは?ここでは、ある数値がミステリーナンバー(Mystery Number)であるかどうかを判定する方法を解説します。ミステリーナンバーとは、互いに桁を逆にした(反転させた)2つの数の和として表すことができる数のことです。例えば、121 は「29 + 92」と表すことができます。29 と 92 は互いに数字を逆順にした関係にあるため、121 はミステリーナンバーだと言えます。アルゴリズムの考え方判定を行うには、1 から n/2 までの各数値 i について、その逆順の数 j を求め、「i + j == n」が成り立つかどうかをすべてのペアに対して確認します。条件を満たすペアが1

  15. C++で数値が別の数値の累乗であるかどうかを判定する方法

    この記事では、ある数値が別の数値の累乗として表せるかどうかを判定する方法を解説します。例えば、125 と 5 という2つの数値が与えられた場合、125 が 5 の累乗であれば true を返します。実際、125 = 53 なので、この場合は true となります。判定の考え方はシンプルです。基数 x の累乗値を順番に計算していき、目的の数値 y に一致するかどうかを確認します。一致すれば「表せる」、y を超えてしまえば「表せない」と判断できます。アルゴリズム手順は以下の擬似コードの通りです。特別なケースとして、x が 1 の場合は y も 1 のときのみ true を返します(1 の累乗は常に

  16. C++で数値がピタゴラス素数かどうかを判定する方法

    本記事では、ある数がピタゴラス素数(Pythagorean Prime)であるかどうかをC++で判定する方法を解説します。ロジックの詳細に入る前に、まずピタゴラス素数とはどのような数なのかを見ていきましょう。 ピタゴラス素数とは? ピタゴラス素数とは、4n + 1 の形で表すことができる素数のことです。つまり、ある数がピタゴラス素数であるかを調べるには、次の2つの条件を確認します。 その数が素数であること その数を4で割った余りが1であること この両方の条件を満たせば、その数はピタゴラス素数です。ピタゴラス素数の例としては、{5, 13, 17, 29, 37, 41, 53, …} など

  17. C++で数値が完全素数(フルプライム)かどうかを判定する方法

    完全素数(フルプライム)とは?本記事では、ある数値が「完全素数(フルプライム)」であるかどうかを判定する方法を解説します。完全素数とは、その数値自体が素数であり、かつ各桁の数字もすべて素数である数のことです。例えば、37は2桁とも素数の数字(3と7)で構成され、数値全体も素数であるため、完全素数です。一方、97は数値自体は素数ですが、各桁に9という素数でない数字が含まれているため、完全素数ではありません。判定のアプローチ効率的な判定方法は以下の2段階で行います。まず、素数でない桁が含まれていないかを確認します。各桁の数字は0から9の範囲に収まるため、この範囲で素数となるのは2、3、5、7の4つ

  18. C++で数が四乗素数(Quartan Prime)かどうかを判定する方法

    この記事では、ある数が「四乗素数(Quartan Prime)」であるかどうかを判定するC++プログラムを紹介します。ロジックの詳細に入る前に、まず四乗素数とはどのような数なのかを確認しておきましょう。 四乗素数とは? 四乗素数とは、x4 + y4 の形で表すことができる素数のことです。ここで、x と y はともに正の整数(x, y > 0)である必要があります。 四乗素数には興味深い性質があります。奇数の4乗は必ず16で割ると1余るため、x と y の一方が偶数でもう一方が奇数である場合、その和は16で割ると1余る数になります。したがって、「その数が素数であり、かつ16で割った余りが1

  19. C++で数値Nが基数b表記において1から始まるかどうかを判定する方法

    本記事では、数値Nと基数bが与えられたとき、「Nを基数bで表記すると先頭の桁が1になるかどうか」を判定する方法をC++で解説します。 まず具体例を見てみましょう。数値6を2進数で表すと「110」であり、先頭は1です。4進数で表すと「12(4)」となり、これも先頭が1です。このように、同じ数でも基数によって表記が変わり、先頭の桁が1になる場合とならない場合があります。 判定の考え方(数学的な背景) 数値Nを基数bで表すと、m+1桁の数列 dm dm-1 … d0 になり、次の関係が成り立ちます。 dm × bm + dm-1 × bm-1 + … + d0 × b0 = N ここで、先頭の桁

  20. 和と積がどちらもNに等しくなる2つの数を求めるC++プログラム

    この記事では、a + b = N かつ a × b = N を同時に満たすような2つの数「a」と「b」を見つけるプログラムの作成方法について解説します。 a + b = N および a × b = N 数学的なアプローチ まず、この問題は代数を使って整理できます。2つの式から「a」を消去すると、「b」と「N」に関する二次方程式が得られます。 b2 − bN + N = 0 この二次方程式には2つの解(根)があり、それぞれが「a」と「b」の値に対応します。解の公式(判別式を利用する方法)を用いて解を求めると、aとbは次のように表されます。 $a= (N-\sqrt{N*N-4N)}/2\\ b=

Total 5990 -コンピューター  FirstPage PreviousPage NextPage LastPage CurrentPage:74/300  20-コンピューター/Page Goto:1 68 69 70 71 72 73 74 75 76 77 78 79 80