C言語で数の最大の素因数を求めるプログラムの作成方法
この記事では、ある整数の最大の素因数を効率的に求める方法を解説します。例として n = 1092 を考えてみましょう。1092 を素因数分解すると 2 × 2 × 3 × 7 × 13 となるため、最大の素因数は 13 です。
この問題を解くには、以下の手順に従います。
数が 2 で割り切れる間、最大値として 2 を記録し、数を 2 で繰り返し割ります。
この時点で数は必ず奇数になっています。そこで 3 から数の平方根までの範囲を調べ、現在の値 i で割り切れる場合は i を最大の素因数として記録し、数を i で割りながら処理を続けます。
最後に、残った数が 2 より大きい場合(1 ではない場合)、その数自体が最大の素因数となります。
処理の流れをより明確に把握するために、アルゴリズムを確認してみましょう。
アルゴリズム
getMaxPrimeFactors(n)
begin while n is divisible by 2, do max := 2 n := n / 2 done for i := 3 to √n, increase i by 2, do while n is divisible by i, do max := i n := n / i done done if n > 2, then max := n end if end
C言語による実装例
#include<stdio.h>
#include<math.h>
int getMaxPrimeFactor(int n) {
int i, max = -1;
while(n % 2 == 0) {
max = 2;
n = n/2; /*2で割ることでnを小さくしていく*/
}
for(i = 3; i <= sqrt(n); i=i+2){ /*iを2ずつ増やし、奇数のみを調べる*/
while(n % i == 0) {
max = i;
n = n/i;
}
}
if(n > 2) {
max = n;
}
return max;
}
main() {
int n;
printf("Enter a number: ");
scanf("%d", &n);
printf("Max prime factor: %d", getMaxPrimeFactor(n));
}実行結果
Enter a number: 24024 Max prime factor: 13
このアルゴリズムの計算量は O(√n) であり、1 から順にすべての数を試す単純な全探索よりもはるかに効率的です。平方根まで調べれば十分な理由は、それより大きな約数が存在しても、対応する小さな約数が必ずペアとして存在するためです。また、最初に 2 をすべて取り除くことで、以降のループを奇数のみに限定でき、処理速度がさらに向上します。
-
Pythonでリスト内の最大値を見つける方法|sort()とmax()の2つのアプローチ
この記事では、リストの中から最大の数値を見つけるための解決策とアプローチについて詳しく解説します。問題の概要数値のリストが与えられたとき、その中から最大の要素を見つけ出す必要があります。Pythonでは、主に以下の2つの方法でこれを実現できます。ソート(並べ替え)を利用する方法組み込み関数 max() を利用する方法アプローチ1:sort() 関数を使う方法リストを sort() メソッドで昇順に並べ替えると、リストの最後の要素(インデックス -1)が必ず最大値になります。サンプルコードlist1 = [18, 65, 78, 89, 90] list1.sort() # メイン処理 prin
-
【Python】ある数の最大の素因数を求めるプログラムの書き方
この記事では、「与えられた整数の最大の素因数を求める」という問題に対する解決方法を、具体的なコード例とともにわかりやすく解説します。 問題文 正の整数 n が与えられたとき、その数の最大の素因数を求めます。 例えば n = 15 の場合、15 は 3 × 5 と素因数分解できるため、答えは 5 となります。 解き方のアプローチ 入力された数を、小さい約数から順番に割っていくことで素因数分解します。 割り切れるたびに、その時点での約数(素因数)を「最大値」として更新していきます。 平方根まで調べれば十分なため、計算量を抑えられます。 実装例(サンプルコード) import math def