Terinspirasi oleh Murah, Cepat, Bagus , kita akan menerapkan algoritma yang memiliki tepat dua di antaranya.
Matematika
Dengan dua bilangan nol bukan a dan b , GCF d adalah bilangan bulat terbesar yang membagi a dan b tanpa sisa. Koefisien Bézout adalah pasangan bilangan bulat (x, y) sedemikian rupa sehingga ax + by = d . Koefisien Bézout tidak unik. Misalnya, diberikan:
a = 15, b = 9
Kita punya
d = 3
x = 2
y = -3
Sejak 15*2 + 9*(-3) = 30 - 27 = 3
.
Cara umum untuk menghitung GCF dan sepasang koefisien Bézout adalah menggunakan Algoritma Euclid , tetapi itu bukan satu-satunya cara.
Kode
Program Anda harus mengambil dua bilangan bulat sebagai input. Ini akan menghasilkan / mengembalikan faktor umum terbesar dan sepasang koefisien Bézout.
Input contoh:
15 9
contoh output
3 (2, -3)
Outputnya bisa dalam urutan dan format apa pun, tetapi harus jelas yang mana adalah GCF dan yang merupakan koefisien.
Si curang
Program Anda berpotensi menjadi murah, cepat, dan bagus. Sayangnya, itu hanya dua.
- Saat itu tidak murah , program harus menggunakan sumber daya sistem dalam jumlah yang berlebihan.
- Saat itu tidak cepat , program harus menghabiskan banyak waktu.
- Jika tidak bagus , output program harus salah.
Program harus dapat melakukan (well, not do) ketiganya. Yang dilakukan saat terserah Anda- bisa berdasarkan waktu, kompiler, input mana yang lebih besar, dll. Beberapa catatan tambahan:
- Program Anda seharusnya tidak curang dan harus lulus inspeksi sepintas. Saya akan sedikit curiga jika Anda menerapkan tiga algoritma terpisah.
- Dalam kasus murah , "jumlah sumber daya sistem yang berlebihan" adalah segala sesuatu yang akan memperlambat program lain. Bisa jadi memori, bandwidth, dll.
- Dalam kasus cepat , "waktu berlebihan" berarti relatif terhadap cara kerjanya dalam kasus murah dan bagus . Program masih harus selesai. Semakin dekat Anda bisa "sangat frustasi tetapi tidak cukup frustasi untuk menghentikan program" yang (lebih lucu dan) lebih baik.
- Dalam kasus yang baik , hasilnya tidak seharusnya salah dan harus lulus inspeksi sepintas. Saya akan sangat curiga jika itu memberi saya GCF "2 anna setengah".
Ini adalah kontes popularitas, jadi kebanyakan orang yang menang menang!
EDIT
Untuk memperjelas, saya mencari program yang bisa "cepat dan murah" dan "murah dan bagus" dan "cepat dan bagus" dalam kasus yang berbeda, bukan yang hanya melakukan salah satunya.
sumber
Jawaban:
C
Murah dan cepat. Anda mendapatkan gcd dalam sekejap mata. Namun pria yang melakukannya tidak tahu tentang "Bézier co-something" jadi dia hanya membagi a dan b dengan gcd. (Untuk membuat segalanya lebih buruk, pada saat itu a dan b cukup jauh dari nilai awal mereka karena algoritma yang ia pilih dengan bijak)
sumber
C #
Ini menghitung koefisien Bézout. Saya menggunakan algoritma Extended Euclidean .
sumber
Perl 5
Tidak murah: main () disebut rekursif (mengisi tumpukan) sampai peringatan "rekursi dalam" dipecat oleh perl yang akan keluar dari aplikasi karena handler __WARN__.
Tidak cepat: Ketika algoritma gcf () mengembalikan hasil yang benar, kode hanya hang selama beberapa detik (pilih () di main ()).
Tidak bagus: Semua hasil di atas 99 (atau di bawah -99) salah.
Semuanya tidak begitu kreatif; menantikan jawaban yang lebih elegan.
sumber
Python
Ini murah dan cepat tetapi buruk pada kenyataan bahwa kisaran dibatasi pada input terbesar sehingga mungkin tidak menemukan sepasang koefisien.
Teka-teki yang bagus.
sumber
Javascript
Tidak murah
Menggunakan banyak sumber daya sistem.
Tidak cepat
Gunakan panggilan balik, sama seperti failafe ekstra.
Tidak baik
Batas ketat
gcf(10, 10)
, hanya untuk ruang disk yang aman.sumber