Tulis sebuah program, dalam bahasa pilihan Anda, yang tampaknya berhasil menemukan contoh tandingan untuk Teorema Terakhir Fermat . Yaitu, temukan bilangan bulat a , b , c > 0 dan n > 2 sedemikian rupa sehingga n + b n = c n .
Tentu saja, Anda tidak bisa benar - benar melakukannya, kecuali ada kekurangan dalam bukti Andrew Wiles. Maksudku berpura - pura , dengan mengandalkan
- integer overflow
- kesalahan pembulatan floating-point
- perilaku yang tidak terdefinisi
- tipe data dengan definisi penambahan, eksponensial, atau kesetaraan yang tidak biasa
- bug kompiler / juru bahasa
- atau sesuatu di sepanjang garis itu.
Anda mungkin sulit-kode beberapa atau semua variabel a
, b
, c
, atau n
, atau mencari mereka dengan melakukan loop seperti for a = 1 to MAX
.
Ini bukan kode golf; ini adalah kontes untuk menemukan solusi yang cerdas dan halus.
Jawaban:
J
Sebenarnya, Fermat memang membuat kesalahan besar: Sebenarnya salah untuk b, c atau n jika a adalah 1:
sumber
1^(9 + (3^(9 = (42^9))))
1^i.5
mengevaluasi ke1 1 1 1 1
.TI-Basic
Output (benar)
sumber
1782^12+1841^12=1922^12
.Jawa
Cowok Fermat ini pasti sedang tidur. Saya mendapatkan ratusan solusi untuk persamaan. Saya hanya mengkonversi rumus Excel saya ke program Java.
sumber
^
di Java adalah xor, bukan power.C ++
Dikompilasi dengan
clang++ -O3 -o fermat fermat.cpp
, diuji denganUbuntu clang version 3.4.1-1~exp1 (branches/release_34) (based on LLVM 3.4.1)
:Kami jelas menemukan a, b, c> 0 sehingga a 3 + b 3 = c 3 (ini juga berfungsi untuk n = 4, 5, 6, ...).
sumber
++
inclang++
.val.u
dapat meluap (akan berbeda jika itu akan menjadiuint32_t
gantinya). Selain itu, kode ini juga menggunakanunion
cara yang tidak benar (menurut standar, Anda tidak dapat menulis ke satu bidang, dan membaca bidang lainnya), tetapi ini diizinkan oleh banyak kompiler (sesuai dengan dokumentasinya).a,b,c
(atau apa pun, dalam hal ini)fermat()
membuat fungsi tidak pernah kembali.Jawa
Sepertinya teorema berlaku untuk n = 3, tetapi saya menemukan contoh tandingan untuk n = 4:
Keluaran:
Penjelasan:
sumber
Python
sumber
True
karena math.pow mengembalikan angka floating-point, dan ini tidak memiliki cukup presisi untuk mendapatkan jawaban yang benarFalse
,.GolfScript
Pendekatan ini menemukan banyak solusi yang berbeda. Sebagai contoh:
Bagaimana itu bekerja
sumber
C
Yah tentu saja kalian semua menemukan contoh tandingan, Anda terus mendapatkan bilangan bulat bilangan bulat. Plus, Anda menjadi sangat lambat dengan mengulangi c juga. Ini adalah cara yang jauh lebih baik untuk melakukannya!
sumber
C
Kita semua membenci bilangan bulat bilangan bulat, jadi kami akan menggunakan eksponen kecil
n
dan beberapa konversi floating point. Tetapi teorema tetap tidak cocoka = b = c = 2139095040
.Keluaran:
Disproved for 2139095040, 2139095040, 2139095040, 42: yes
Disproved for 2139095040, 2139095040, 2139095040, 90: yes
sumber
Javascript
42 adalah sihir, Anda tahu.
Dan juga Wiles bukan satu.
sumber
T-SQL
Untuk membantah teorema orang Fermat ini, kita hanya perlu menemukan contoh balasan. Sepertinya, dia sangat malas, dan hanya mencobanya untuk permutasi yang sangat kecil. Bahkan, dia bahkan tidak berusaha. Saya menemukan contoh balasan hanya dalam 0 <a, b, c <15 dan 2 <e <15. Maaf, saya pegolf, jadi saya akan ungolf kode ini nanti!
Mengembalikan 1, artinya kami menemukan contoh balasan!
sumber
JavaScript
Tampaknya orang ini ke sesuatu yang baik-baik saja. Ke narkoba jika Anda bertanya kepada saya. Mengingat kendala, tidak ada set nilai yang dapat ditemukan yang mana teorema itu berlaku.
sumber
n
) harus>= 3
.Contoh tandingan BASIC lainnya
sumber