すぐるホームページ > きしも.com > 数学 > 整数の問題を解くための補助ツール・解説

整数の問題を解くための補助ツール・解説

 

 整数の問題を力づくで解くときや,答えを点検するときに使用するツールです。
 プログラム言語はJavascriptです。
 たとえば,次のような例題があったとしましょう。(この問題は,算数にチャレンジ第680回から引用させていただきました)

例題
 2つの4ケタの整数、「アイウエ」と「ウエアイ」があります。(※)ただし、整数「アイウエ」>整数「ウエアイ」です。

 この2つの整数の最大公約数は、144になっています。

 このとき、整数「アイウエ」として考えられるもののうち、最も小さいものを求めてください。

 ※・・・例えば整数「アイウエ」は、千の位がア、百の位がイ、十の位がウ、一の位がエである4ケタの整数を表してます。

 この問題を,Javascriptを使ってプログラムすると,次のようになります。
 for(a = 0; a <= 9; ++a){      //アを変数aにして,0から9まで動かす
 for(b = 0; b <= 9; ++b){      //イを変数bにして,   〃
 for(c = 0; c <= 9; ++c){      //ウを変数cにして,   〃
 for(d = 0; d <= 9; ++d){      //エを変数dにして,   〃
     p = 1000 * a + 100 * b + 10 * c + d      //整数アイウエ
     q = 1000 * c + 100 * d + 10 * a + b      //整数ウエアイ
     p > q かつ,pとqの最大公約数が144ならば,を表示する。
 }}}}
 表示された数の中で,最も小さいものを見つけて,答えにする。
        ※本当は,変数aと変数cは,0からではなく1からでOKなのですが,固いこと言わないことにします。
 このプログラムの中で面倒な部分は2つあります。
 1つ目は,はじめの4行の部分です。
 for(a = 0; a <= 9; ++a){
 for(b = 0; b <= 9; ++b){
 for(c = 0; c <= 9; ++c){
 for(d = 0; d <= 9; ++d){
 同じような文を何回も入力するのは,かなりタルいです。
 しかも,4ケタの数だから,まだマシなわけで,もし10ケタとかだったら,入力するのにかなり時間がかかってしまいます。
 2つ目は,最大公約数を求める部分です。
 …pとqの最大公約数が144ならば,…
 最大公約数を求める関数は,Javascript では存在しませんから,わざわざ作成しなければなりません。
 そこで,このような整数の問題を解くプログラムを素早く作成するための補助として,整数の問題を解くための補助ツールを作成しました。
 起動すると,次のような画面が表示されます。
  
 まず,変数の個数を決めます。例題の場合なら4ケタですから4個ですね。
 変数名は,a,b,c, …のように,必ず a から名前がつけられます。
 次に,変数が何という値からかを決めます。
 例題の場合,「アイウエ」は4ケタの数とわかっていますから,アは0になることはありません。
 そこで,「変数 a のみ1から,あとは0から」のボタンをチェックしてもよいのですが,いまはどの変数も0からということにしてみます。
 次に,変数が何という値までかを決めます。
 例題の場合,どの変数も9までです。
 次に,変数をどのように使用するかを決めます。
 もし,1ケタ目よりも2ケタ目を大きく,2ケタ目よりも3ケタ目を大きく,…というものだけ取り出したい場合は,"a<b<c<d<e"のボタンをクリックします。
 また,それぞれのケタの数字はすべて異なる,という問題の場合は,"同じになるのだけ回避する"のボタンをクリックします。
 例題の場合は,ごく普通にすべての場合をしらみつぶしに探っていきたいので,"普通にすべての場合"のボタンをクリックします。
 ここで「埋め込み」ボタンをクリックすると,「プログラム入力エリア」に,右図のように文が入力されます。
 次に,プログラム本体を入力します。
 整数アイウエは,p = 1000 * a + 100 * b + 10 * c + d で,
 整数ウエアイは,q = 1000 * c + 100 * d + 10 * a + b でした。
 さらに,p > q という条件と,pとqの最大公約数が144のもののみ,表示するということでした。
 最大公約数は,「使用可能関数一覧」の中のgcd( )という関数が使えます。
 また,値を表示するときは,やはり「使用可能関数一覧」の中の,println( )という関数を使います。
 p > q で,さらに gcd(p, q) が 144 のもののみ表示するということですから,
 if(p > q && gcd(p, q) == 144){ println(p); }
 となります。
 これらの文を,手入力で入力してください。
 もし,「全部で何個ですか?」というような問題の場合は,カウント変数の x を,プログラム本体の中でインクリメントし,最後の処理プログラムのところで,x を表示するようにします。
 例題の場合は,最後の処理プログラムはありません。
 最後に「プログラム実行」ボタンをクリックすると,表示画面にあてはまる数が表示されます。
 例題の場合は,8064 と 9648 が表示されました。最小の数を求めるということですから,解答は 8064 になります。