フェルマーの最終定理の「反例」(C言語・Java編)


先日紹介した『数学ガール フェルマーの最終定理』では、フェルマーの最終定理の反例(?)が紹介されています。しかしその反例は、計算すれば反例でないことがすぐにわかってしまうものです。ここではもう少し凝って、計算すると「反例」だということになるものを紹介しましょう(もちろん括弧付きです)。

a=139、b=954、c=2115のとき、a^3+b^3=c^3になります。

自分で見つけたい場合には、素朴に、次のようなプログラムを書けばいいでしょう。

#include <stdio.h>
int main ()
{
  int a, b, c;
  for (c=1; ; c++) {
    for (a=1; a<c; a++) {
      for (b=a; b<c; b++) {
        if (a*a*a+b*b*b==c*c*c) goto found;
      }
    }
  }
  found:
    printf("Found!\n");
    printf("a=%d, b=%d, c=%d\n", a, b, c);
    return 0;
}

実行すると、反例が見つかります(規格で規定していない動作を利用しているので、うまくいかない処理系もあるかもしれません)。

Javaでも同じことが起こります。

public class Fermat {

  public static void main(String[] args) {
    int a, b, c;

    search:
    for (c = 1;; c++) {
      for (a = 1; a < c; a++) {
        for (b = a; b < c; b++) {
          if (a * a * a + b * b * b == c * c * c) {
            break search;
          }
        }
      }
    }
    System.out.println("Found!");
    System.out.printf("a=%d, b=%d, c=%d\n", a, b, c);
  }
}

フェルマーの最終定理 (新潮文庫)フェルマーの最終定理自体に興味のある人には、最近文庫になったサイモン・シン『フェルマーの最終定理』もお勧めです。

フェルマーの最終定理の「反例」(C言語・Java編)” への5件のコメント

  1. サイモン・シンの作品は面白いですね。
    ビッグバン宇宙論も早く文庫化してほしいです。

  2. しおざわさん
    サイモン・シンはうまいですね。
    でも、フェルマーの最終定理に関する本は、いくら数式を使って説明されても、まったく核心に近づいた気分にはなれないんです。
    それに比べればビッグバン理論は、理解するためのトレーニングがかなり少なくていいです。

  3. #include
    int main ()
    {
      int a, b, c;
      for (c=1; ; c++) {
        for (a=1; a<c; a++) {
          for (b=a; b<c; b++) {
            if (a*a*a+b*b*b==c*c*c) goto found;
          }
        }
      }
      found:
        printf("Found!\n");
        printf("a=%d, b=%d, c=%d\n", a*a*a, b*b*b, c*c*c);
        return 0;
    }
    で実行結果は、
    Found!
    a=2685619, b=868250664, c=870936283

    でも、実際は
    c=2115*2115*2115=9460870875

    なぜc=870936283
    となってしまうのか???

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です