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

C++で数値の最大の素因数を求める方法


ある整数 x が与えられたとき、その最大の素因数を求めることを考えます。例えば、x = 6 の場合、6 を素因数分解すると 2 × 3 となるため、最大の素因数は 3 です。

この問題は、対象の数を小さい約数から順に割り続けて素因数分解を行い、その過程で現れる素因数のうち最も大きいものを記録していくことで解くことができます。

アルゴリズムの流れ

  1. n が偶数である限り 2 で割り続け、素因数として 2 を記録します。
  2. 3 から √n までの奇数 i について、n が i で割り切れる限り割り続け、i を素因数として記録します。
  3. ループ終了後も n が 2 より大きければ、残った n 自体が素数なので、それが最大の素因数となります。

√n まで調べれば十分なのは、n の約数の組のうち片方が必ず √n 以下になるためです。この工夫により、計算量を O(√n) に抑えることができます。

C++による実装例

#include <iostream>
#include<cmath>
using namespace std;
long long getMaxPrimefactor(long long n) {
    long long maxPF = -1;
    while (n % 2 == 0) {
        maxPF = 2;
        n /= 2;
    }
    for (int i = 3; i <= sqrt(n); i += 2) {
        while (n % i == 0) {
            maxPF = i;
            n = n / i;
        }
    }
    if (n > 2)
    maxPF = n;
    return maxPF;
}
int main() {
    long long n = 162378;
    cout << "Max Prime factor of " << n << " is " << getMaxPrimefactor(n);
}

実行結果

Max Prime factor of 162378 is 97

この例では、162378 は 2 × 3³ × 31 × 97 と素因数分解できるため、最大の素因数は 97 となり、プログラムの出力と一致しています。

  1. C++で列車の停車駅の組み合わせ数を求める方法

    地点XとYの間にはn個の中間駅があるとします。ここで、「どの2つの停車駅も隣り合わない」という条件のもとで、s個の駅に停車する列車の配置方法が何通りあるかを求める問題を考えてみましょう。この記事では、停車駅の組み合わせ数を求めるためのアプローチを段階的に詳しく解説します。この問題は、本質的には組合せ論の問題であり、s個の停車駅の選び方の総数を求めることになります。 問題を解くアプローチ まず具体例として、中間駅が8個あり、そのうち3個の駅に停車させたい場合を考えてみます。 n = 8, s = 3 このとき、列車が停車できない駅は(n − s)、つまり5個残ることになります。 停車できない

  2. 【Python】ある数の最大の素因数を求めるプログラムの書き方

    この記事では、「与えられた整数の最大の素因数を求める」という問題に対する解決方法を、具体的なコード例とともにわかりやすく解説します。 問題文 正の整数 n が与えられたとき、その数の最大の素因数を求めます。 例えば n = 15 の場合、15 は 3 × 5 と素因数分解できるため、答えは 5 となります。 解き方のアプローチ 入力された数を、小さい約数から順番に割っていくことで素因数分解します。 割り切れるたびに、その時点での約数(素因数)を「最大値」として更新していきます。 平方根まで調べれば十分なため、計算量を抑えられます。 実装例(サンプルコード) import math def