Tiga bilangan bulat positif A, B, C adalah ABC-triple jika merupakan koprime, dengan A <B dan memuaskan hubungannya: A + B = C
Contoh:
1, 8, 9
adalah triple-ABC karena mereka adalah koprime, 1 <8 dan 1 + 8 = 96, 8, 14
bukan karena mereka bukan koprime7, 5, 12
bukan karena 7> 5
Anda dapat melihat presentasi Frits Beukers 2005 ini untuk detail lebih lanjut tentang ABC-triples.
Input output
Tiga bilangan bulat, ditulis desimal. Dapat dipisahkan nilai atau daftar. Output harus berupa nilai true / falsy apakah ketiga bilangan bulat adalah ABC-triple.
Catatan: Penting untuk menghormati urutan bilangan bulat dalam daftar, misalnya: 1, 8, 9
tidak dianggap sebagai daftar yang sama dengan 9, 1, 8
atau kombinasi lainnya. Jadi yang pertama adalah ABC-triple dan yang kedua tidak.
Jadi A adalah elemen pertama dari daftar, B yang kedua dan C yang ketiga.
Uji kasus
Setiap daftar berikut harus menampilkan nilai yang benar
[1, 8, 9]
[2, 3, 5]
[2, 6436341, 6436343]
[4, 121, 125]
[121, 48234375, 48234496]
Setiap daftar berikut harus menampilkan nilai falsey
[1, 1, 2]
[1, 2, 5]
[1, 9, 8]
[4, 12872682, 12872686]
[6, 8, 14]
[7, 5, 12]
[A,B,C]
, atau apakah kita juga diizinkan untuk mengambil input dalam urutan[C,B,A]
atau[C,A,B]
?Jawaban:
Jelly ,
109 byteCobalah online!
Bagaimana itu bekerja
sumber
Haskell ,
48 3829 byte-10 byte karena TFeld 's
gcd
trik!Terima kasih -7 byte HPWiz untuk meningkatkan uji co-primality dan menemukan ruang yang berlebihan!
-2 byte terima kasih kepada nimi untuk menyarankan operator-infix!
Cobalah online!
Penjelasan
Dua kondisi pertamagcd(a,b)=gcd(a,c)=gcd(b,c) :
a < b
dana + b == c
cukup jelas, yang ketiga menggunakanMenulisgcd(a,c)=U⋅a+V⋅c menggunakan identitas Bézout dan menggantikan c=a+b memberi:
Karena itugcd adalah solusi positif minimal untuk identitas yang mengikuti bahwa gcd(a,b)=gcd(a,c) . Kasus lainnya simetris.
sumber
gcd a b==1
. Sejakgcd a b
membelaha+b=c
. yaitugcd(gcd a b)c=gcd a b
Perl 6 ,
3332 byte-1 byte terima kasih kepada nwellnhof
Cobalah online!
Blok kode anonim yang mengambil daftar tiga angka dan mengembalikan Benar atau Salah.
Penjelasan
sumber
Excel, 33 byte
sumber
bash, 61 byte
Cobalah online!
Input sebagai argumen baris perintah, output dalam kode keluar (juga menghasilkan output pada stdout sebagai efek samping, tetapi ini dapat diabaikan).
Bagian kedua (mulai dari
&&((
) cukup standar, tetapi yang menarik adalah tes coprime:sumber
&&
dapat diubah menjadi&
karena diutamakanJava 10,
6564 byte-1 byte terima kasih kepada @Shaggy .
Cobalah online.
Penjelasan:
sumber
a==1
->a<2
untuk menyimpan byte.05AB1E ,
121110 byteDisimpan 1 byte berkat Kevin Cruijssen
Cobalah online! atau sebagai Test Suite
Penjelasan
sumber
RÆ_*`\‹*¿Θ
Test Suite .Python 2 ,
6967636255 byteCobalah online!
Python 3 ,
5851 byteCobalah online!
-7 byte, terima kasih kepada H.PWiz
sumber
gcd
dalam inigcd
valid? Bagaimana jikaa
tidak dimarahic
?gcd(a,b)
, karenagcd(a,b)
membagia+b
Japt ,
16141311 byteCobalah
sumber
>
mengikuti©
.JavaScript (ES6),
54 43 4240 byteTerima kasih kepada @Shaggy untuk menunjukkan bahwa kita tidak perlu menghitunggcd ( a , c ) . Disimpan 11 byte dengan menulis ulang kode yang sesuai.
Mengambil input sebagai 3 bilangan bulat terpisah. Kembalit r u e untuk ABC-triple, atau salah satunya 0 atau fa l s e jika tidak.
Cobalah online!
sumber
gcd(c,a)
.Bahasa Wolfram
24 30 2826 byteDengan 2 byte yang dicukur oleh Doorknob. 2 byte selanjutnya dicukur oleh @jaeyong dinyanyikan
sumber
CoprimeQ@##
untuk menghemat 2 byte.GCD@##==1
akan menghemat 2 byteC # (Visual C # Interactive Compiler) , 90 byte
Berjalan untuk angka hingga 1e8, membutuhkan sekitar 35 detik di mesin saya. Alih-alih menghitung gcd seperti yang lain, fungsi hanya instantiate array besar dan memfilter indeks yang bukan pembagi a atau b, dan memeriksa berapa banyak elemen yang tersisa. Selanjutnya periksa apakah elemen satu ditambah elemen dua sama dengan elemen tiga. Terakhir, ia memeriksa apakah elemen pertama kurang dari yang kedua.
Cobalah online!
sumber
C # (Visual C # Interactive Compiler) , 59 byte
Cobalah online!
sumber
ECMAScript Regex, 34 byte
Input dalam bentuk unary, dalam domain
^x*,x*,x*$
(berulang-ulangx
dibatasi oleh,
).^(?!(xx+)\1*,\1+,)(x*)(,\2x+)\3\2$
Cobalah online! (.NET regex engine)
Cobalah secara online! (Mesin regex SpiderMonkey)
Pertanyaannya memang mengatakan "Tiga bilangan bulat, ditulis desimal ", jadi ini mungkin tidak memenuhi syarat (karena dibutuhkan input di unary), tetapi itu membuat regex murni yang elegan sehingga saya berharap setidaknya akan dihargai.
Namun, perhatikan bahwa jika frasa tersebut harus diartikan secara harfiah, pengajuan lambda dan fungsi yang menggunakan argumen bilangan bulat harus didiskualifikasi juga, karena untuk secara ketat mematuhi spesifikasi pertanyaan mereka perlu mengambil input dalam bentuk string.
sumber
J , 27 byte
Cobalah online!
Terinspirasi oleh solusi Jo King's Perl
sumber
C # (.NET Core) , 68 byte
Tanpa Linq.
Cobalah online!
sumber
Stax , 12 byte
Jalankan dan debug itu
sumber
Bersih , 43 byte
Cobalah online!
Mirip pada dasarnya semua yang lain karena tes langsung sama.
sumber
Pari / GP , 30 byte
Disimpan 2 byte berkat @Shaggy .
Cobalah online!
sumber
Befunge-98 (FBBI) , 83 byte
Cobalah online!
Input yang merupakan triple integer
[A,B,C]
dimasukkan ke Befunge sebagai integer yang dipisahkan oleh ruangC B A
.sumber
Mathematica 35 byte
jika pesanan penting:
atau...
sumber
Retina 0.8.2 ,
4241 byteCobalah online! Tautan termasuk kasus uji. Sunting: Disimpan 1 byte berkat @Deadcode. Penjelasan:
Konversikan ke unary.
Pastikan A dan B tidak memiliki faktor umum.
Periksa bahwa A <B dan A + B = C.
sumber
^(1+),(1+\1),\1\2$
ke^(1+)(,1+\1)\2\1$
.A
operasi Retina sebenarnya tidak menyelamatkan saya byte.Gangguan Umum, 51 byte
Cobalah online!
sumber