2019/07/29 公開
・整数の累乗
累乗は、同じ数を何回か掛け合わせることです。
ここで作成するメソッドは、掛ける元の数(基数)と掛ける回数(指数)を指定することで累乗を得るものです。
基数をa、指数をnとすると、累乗=anです。例えばa=3でn=5であれば、累乗=35=3×3×3×3×3=243となります。これは3を5回掛け合わせる計算を意味しています。
以下は、整数の累乗を計算を行うメソッドを含むJavaのソースコード例の1つ目です。
このソースは、累乗のルール通りに、aの値をn回掛けて結果を得るものです。
Power1.java ← クリックしてダウンロードページに移動001: public class Power1 { 002: // aのn乗を戻すメソッド 003: static int power( int a, int n ) 004: { 005: // 結果の初期値 006: int result = 1; 007: 008: // nが1の場合に計算 009: if ( 1 <= n ) { 010: // aをn回掛ける 011: for ( int i = 0; i < n; ++ i ) { 012: result = result * a; 013: } 014: } 015: 016: // 結果を戻す 017: return result; 018: } 019: 020: 021: // メイン 022: public static void main( String[] args ) { 023: // 変数の宣言 024: int a, n; 025: int ans; 026: 027: // べき乗の計算 028: a = 5; 029: n = 7; 030: ans = power( a, n ); 031: 032: // 結果表示 033: System.out.println( a + "の" + n + "乗は、" + ans ); 034: } 035: }
Power1.javaの出力結果
5の7乗は、78125
002: // aのn乗を戻すメソッド 003: static int power( int a, int n ) 004: { 005: // 結果の初期値 006: int result = 1; 007: 008: // nが1の場合に計算 009: if ( 1 <= n ) { 010: // aをn回掛ける 011: for ( int i = 0; i < n; ++ i ) { 012: result = result * a; 013: } 014: } 015: 016: // 結果を戻す 017: return result; 018: }
これは、整数の累乗を計算するpowerメソッドで、aとnを渡すことでanを計算して戻します。
for文を使って、aをn回掛けています。
nが0以下の値のとき、1を戻すようにしています。
以下は、整数の累乗を計算を行うメソッドを含むJavaのソースコード例の2つ目です。
Power2.java ← クリックしてダウンロードページに移動001: public class Power2 { 002: // aのn乗を戻すメソッド 003: static int power( int a, int n ) 004: { 005: // 結果の初期化 006: int result; 007: 008: // nが0以下の場合、1を戻す 009: if ( 0 >= n ) 010: result = 1; 011: else { 012: // nが1場の場合 013: switch ( n ) { 014: case 1: 015: // n=1の場合、aを戻す 016: result = a; 017: break; 018: case 2: 019: // n=2の場合、a*aを戻す 020: result = a * a; 021: break; 022: 023: default: 024: int pow = power( a, n / 2 ); 025: result = pow * pow; 026: 027: // nが奇数の場合 028: if ( 1 == ( n % 2 ) ) { 029: result *= a; 030: } 031: break; 032: } 033: } 034: 035: return result; 036: } 037: 038: 039: // メイン 040: public static void main( String[] args ) { 041: // 変数の宣言 042: int a, n; 043: int ans; 044: 045: // べき乗の計算 046: a = 5; 047: n = 7; 048: ans = power( a, n ); 049: 050: // 結果表示 051: System.out.println( a + "の" + n + "乗は、" + ans ); 052: } 053: }
Power2.javaの出力結果
5の7乗は、78125
002: // aのn乗を戻すメソッド 003: static int power( int a, int n ) 004: { 005: // 結果の初期化 006: int result; 007: 008: // nが0以下の場合、1を戻す 009: if ( 0 >= n ) 010: result = 1; 011: else { 012: // nが1場の場合 013: switch ( n ) { 014: case 1: 015: // n=1の場合、aを戻す 016: result = a; 017: break; 018: case 2: 019: // n=2の場合、a*aを戻す 020: result = a * a; 021: break; 022: 023: default: 024: int pow = power( a, n / 2 ); 025: result = pow * pow; 026:
これは、整数の累乗を計算するpowerメソッドで、aとnを渡すことでanを計算して戻します。
nが0以下の値のとき、1を戻すようにしています。
Power1.javaとの違いは、再帰を使って掛け算の回数を減らしていることです。掛け算の回数を減らすことで結果を得るまでの時間を短くすることができます。
例えば、累乗=35の場合を見ていきましょう。
3を5回掛けて3×3×3×3×3=243の結果を得ます。
この式を少しだけ変形すると
(3×3)×(3×3)×3
となります。さらに(3×3)をpowとおくと
pow×pow×3
となります。
powは(3×3)なので掛け算が1個、pow×pow×3は掛け算が3個です。
よって、powを計算した値で、pow×pow×3を計算すると掛け算4回で結果を得ることができます。
次に、累乗=39の場合を見ていきましょう。
(3×3×3×3)をpowとおくと
39=pow×pow×3
となります。
さらにpow'=3×3とおくと
pow=3×3×3×3=(3×3)×(3×3)=pow'×pow'
となり、powは掛け算2回で結果を得ることができます。
よって、pow×pow×3を計算すると掛け算4回で結果を得ることができます。
このように、指数(掛ける回数)を2分割して得られた結果どおしの掛け算を行い、掛け算の回数を減らしています。
以下は、整数の累乗を計算を行ために必要な掛け算の回数を表示するJavaのソースコードです。参考にしてくだい。
PowerN.java ← クリックしてダウンロードページに移動001: public class PowerN { 002: // aのn乗の掛け算の回数を戻すメソッド 003: static int power_n( int a, int n ) 004: { 005: // 結果の初期化 006: int result = 0; 007: 008: // nが2以上の場合 009: if ( 2 <= n ) { 010: // nが1場の場合 011: switch ( n ) { 012: case 2: 013: // n=2の場合、a*aを戻す 014: result += 1; 015: break; 016: 017: default: 018: int pow_num = power_n( a, n / 2); 019: result += pow_num; 020: result += 1; 021: 022: // nが奇数の場合 023: if ( 1 == ( n % 2 ) ) { 024: result += 1; 025: } 026: break; 027: } 028: } 029: 030: return result; 031: } 032: 033: 034: // メイン 035: public static void main( String[] args ) { 036: // 変数の宣言 037: int a, n; 038: int ans; 039: 040: // べき乗の計算 041: a = 3; 042: n = 19; 043: ans = power_n( a, n ); 044: 045: // 結果表示 046: System.out.println( a + "の" + n + "乗に使う掛け算の回数は、" + ans ); 047: } 048: }
PowerN.javaの出力結果
3の19乗に使う掛け算の回数は、6
指数(掛ける回数)に対して、実際に掛け算を行う回数が少なくなることが確認できます。
■関連コンテンツ
数学関数について | 数学関数について解説 |
累乗 pow | Math.powの使い方について解説 |
■新着情報
2022.07.07 | 外部プログラムの実行 | exeファイル実行 |
2022.07.06 | 完全数 | 6=1+2+3 |
■広告