2024.10.20
掛け算なしで平方表の作成
はじめに
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100 : 90 8100 91 8281 92 8464 93 8649 94 8836 95 9025 96 9216 97 9409 98 9604 99 9801 100 10000
平方とは
平方(2乗)は、以下の式で計算します。
aの平方 = a2
これを別の式で書くと、
aの平方 = a x a
となります。
平方「(a+1)2」と「a2」の差
ここでは、掛け算を使わないで平方の表を作成するための準備として、「(a+1)2」と「a2」の差について説明します。
aの平方とaに1を足した(a+1)の平方の差は、以下の式で計算できます。
(a+1)2 - a2 = 2a + 1 = a + a + 1
22 - 12 = 1 + 1 + 1 = 3 32 - 22 = 2 + 2 + 1 = 5 42 - 32 = 3 + 3 + 1 = 7 52 - 42 = 4 + 4 + 1 = 9 : 992 - 982 = 98 + 98 + 1 = 197 1002 - 992 = 99 + 99 + 1 = 199 :
このように「a2」に「a + a + 1」を足すと「(a+1)2」が求められます。
(a+1)2 = a2 + a + a + 1
具体例でみていきましょう。
4の平方を求めてみる
4の平方を求める場合は、上の式のaに3を代入します。
(3+1)2 = 32 + 3 + 3 + 1 42 = 9 + 3 + 3 + 1 42 = 16
4の平方は「16」になりました。
100の平方を求めてみる
100の平方を求める場合は、上の式のaに99を代入します。
(99+1)2 = 992 + 99 + 99 + 1 1002 = 9801 + 99 + 99 + 1 1002 = 10000
100の平方は「100」になりました。
平方表の作成
平方の差を利用して、平方の表を作成します。
ここで作成する表は、a=0から開始します。
a=0の場合、a2=0です。
a=1の平方は、
(a+1)2 = a2 + a + a + 1 (0+1)2 = 02 + 0 + 0 + 1 = 1
となります。
さらに、aを1ずつ増やしていくと、
(1+1)2 = (0+1)2 + 1 + 1 + 1 = 1 + 1 + 1 + 1 = 4 (2+1)2 = (1+1)2 + 2 + 2 + 1 = 4 + 2 + 2 + 1 = 9 (3+1)2 = (2+1)2 + 3 + 3 + 1 = 9 + 3 + 3 + 1 = 16
となります。
このように、(a-1)の平方にaを2回足して、1を足す計算を繰り返すことで掛け算を使わないで平方の表を作成することができます。
Javaソースコード
SqrTable1.java
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018
public class SqrTable1 { public static void main( String[] args ) { // 平方の初期値0を代入 int sqr = 0; // 0~100の平方(2乗)を出力 for ( int i = 0; i <= 100; i++ ) { // iとiの平方sqrを出力 System.out.printf( "%3d%6d", i, sqr ); // (i+1)と(i+1)の平方sqrを計算 sqr += i + i + 1; // 改行 System.out.println(); } } }
コンパイル ソースコードが「ANSI」の場合
C:\talavax\javasample>javac -encoding sjis SqrTable1.java
コンパイル ソースコードが「UTF-8」の場合
C:\talavax\javasample>javac SqrTable1.java
実行
C:\talavax\javasample>java SqrTable1
実行結果
0 0 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100 11 121 12 144 13 169 14 196 15 225 16 256 17 289 18 324 19 361 20 400 21 441 22 484 23 529 24 576 25 625 26 676 27 729 28 784 29 841 30 900 31 961 32 1024 33 1089 34 1156 35 1225 36 1296 37 1369 38 1444 39 1521 40 1600 41 1681 42 1764 43 1849 44 1936 45 2025 46 2116 47 2209 48 2304 49 2401 50 2500 51 2601 52 2704 53 2809 54 2916 55 3025 56 3136 57 3249 58 3364 59 3481 60 3600 61 3721 62 3844 63 3969 64 4096 65 4225 66 4356 67 4489 68 4624 69 4761 70 4900 71 5041 72 5184 73 5329 74 5476 75 5625 76 5776 77 5929 78 6084 79 6241 80 6400 81 6561 82 6724 83 6889 84 7056 85 7225 86 7396 87 7569 88 7744 89 7921 90 8100 91 8281 92 8464 93 8649 94 8836 95 9025 96 9216 97 9409 98 9604 99 9801 100 10000
Javaソースコードの解説
001
public class SqrTable1 {
クラス名を、SqrTable1としています。
002
public static void main( String[] args ) {
このmainメソッドからプログラムを実行します。
003 004
// 平方の初期値0を代入 int sqr = 0;
006 007
// 0~100の平方(2乗)を出力 for ( int i = 0; i <= 100; i++ ) {
008 009
// iとiの平方sqrを出力 System.out.printf( "%3d%6d", i, sqr );
aの平方 = a2
変数i、sqrの値の桁を揃えて出力するために、printfメソッドで書式を指定しています。
書式"%3d%6d"の%3dは「整数を最小桁数3桁」、%6dは「整数を最小桁数6桁」で出力することを表しています。半角スペース付の右詰になります。
011 012
// (i+1)と(i+1)の平方sqrを計算
sqr += i + i + 1;
平方sqrに「i + i + 1」を足しています。
「i + i + 1」は以下の式の「a + a + 1」です。
(a+1)2 = a2 + a + a + 1
014 015
// 改行
System.out.println();
改行しています。
以上です。