ぼちぼちあしあと

プログラム初心者の備忘録です。

2020年度京都大学二次試験前期理系数学の問題にチャレンジ!

今日は大学入試にチャレンジしてみる。 といっても、紙に書いて解く訳ではない。 これまでやってきたループを応用して解いてみようかと思う。

解く問題は、2020年度京都大学二次試験前期理系数学大問5。 今年の京大理系数学で一番難しかった問題じゃないかな〜と思う。

問題は以下のサイトをご覧ください。

私大・国公立大学2次試験 入試問題と解答 - 毎日新聞

以下のプログラムを組んで、実行した。

var A = 0;
var f = 0;
var max_A = 0;

for(var m = 1; m <= 30; m++){         // hoge++ は hoge = hoge + 1 と同義
    for(var n = 1; n <= 30; n++){
        if (n % 3 == 0) continue;     // continueはそのループの処理のみスキップ
        f = m ** 3 + n ** 2 + n + 3;  // ** は 累乗を表す
        while(f % 3 == 0){
            A = A + 1;
            f = f / 3;
        }
        if (max_A < A) max_A = A;
        A = 0;
        f = 0;
    }
}
console.log(max_A);

すると答えの一部である4が出力されるではないか!!!

max_Aが4と分かったので、これを反映したプログラムに改変して実行!

var A = 0;
var f = 0;
var max_A = 0;

for(var m = 1; m <= 30; m++){         // hoge++ は hoge = hoge + 1 と同義
    for(var n = 1; n <= 30; n++){
        if (n % 3 == 0) continue;     // continueはそのループの処理のみスキップ
        f = m ** 3 + n ** 2 + n + 3;  // ** は 累乗を表す
        while(f % 3 == 0){
            A = A + 1;
            f = f / 3;
        }
        if(A == 4) console.log("m = " + m + ", n = " + n);
        A = 0;
        f = 0;
    }
}

すると、

m = 3, n = 11

m = 12, n = 11

m = 21, n = 11

m = 30, n = 11

との出力が得られる。

よっしゃあ〜!!!