2013 memiliki faktorisasi utama 3*11*61
. 2014 memiliki faktorisasi utama 2*19*53
. Properti menarik mengenai faktorisasi ini adalah bahwa terdapat bilangan prima yang berbeda dalam faktorisasi 2013 dan 2014 bahwa jumlah ke nomor yang sama: 11+61=19+53=72
.
Tulis sebuah program atau fungsi yang mengambil input dua bilangan bulat positif lebih besar dari 1 dan mengembalikan nilai kebenaran jika ada jumlah faktor prima terpilih dari satu angka yang sama dengan jumlah faktor prima terpilih di angka kedua, dan nilai falsey sebaliknya.
Klarifikasi
- Lebih dari dua faktor utama dapat digunakan. Tidak semua faktor utama dari jumlah tersebut perlu digunakan dalam penjumlahan. Jumlah bilangan prima yang digunakan dari dua bilangan tidak harus sama.
- Bahkan jika suatu prima dinaikkan ke suatu daya yang lebih besar dari 1 dalam faktorisasi suatu bilangan, ia hanya dapat digunakan sekali dalam jumlah bilangan prima untuk bilangan tersebut.
- 1 bukan prima.
- Kedua nomor input akan kurang dari
2^32-1
.
Uji kasus
5,6
5=5
6=2*3
5=2+3
==>True
2013,2014
2013=3*11*61
2014=2*19*53
11+61=19+53
==>True
8,15
8=2^3
15=3*5
No possible sum
==>False
21,25
21=3*7
25=5^2
No possible sum (can't do 3+7=5+5 because of exponent)
==>False
Ini kode golf. Aturan standar berlaku. Kode terpendek dalam byte menang.
true
, ketika mereka berbagi faktor7
?Jawaban:
Julia,
9593 byteFungsi utama adalah
f
dan itu memanggil fungsi pembantug
.Tidak Disatukan:
Disimpan 2 byte berkat Darth Alephalpha
sumber
map(p->map
lebih pendek dari(m=map)(p->m
.Pyth, 11 byte
Masukan dalam formulir
30,7
.sumber
Pyth -
171211 byteTerima kasih kepada @FryAmTheEggman untuk memperbaiki jawaban saya dan menghemat satu byte.
Test Suite .
sumber
ty
karya dan menyimpan selamat tinggal?Haskell,
115106 byteContoh penggunaan:
2013 # 2014
->True
.p
membuat daftar semua faktor utama argumennya, menghapus duplikat, membuat daftar semua urutan, menghapus yang pertama (yang selalu merupakan daftar kosong) dan akhirnya menjumlahkan kalimat berikutnya.#
memeriksa apakahp a
tidak sama dengan perbedaanp a \\ p b
. Jika tidak sama, mereka memiliki setidaknya satu elemen yang sama.sumber
Japt, 25 byte
Output
true
ataufalse
. Cobalah online!Tanpa penjelasan dan penjelasan
Untuk byte tambahan, Anda dapat membagi kode faktorize-unik-gabungkan-jumlah antara kedua input, dengan keuntungan tambahan karena memiliki kompleksitas waktu
O(O(25-byte version)^2)
:sumber
CJam, 23 byte
Uji di sini.
Nilai sebenarnya adalah semua jumlah umum yang digabungkan, nilai falsy adalah string kosong.
Penjelasan
sumber
Brachylog ,
109 byteCobalah online!
Predikat berhasil kembali
[the sum, the sum]
jika ada, dan gagal jika jumlahnya tidak ada.-1 byte, terima kasih kepada Fatalize (pembuat Brachylog) yang mengingatkan saya bahwa predikat meta- verifikasi ada.
sumber
ᵛ - verify
alih-alihˢ=
menyimpan satu byte.MATL , 23 byte
Gunakan rilis saat ini, 2.0.2 , yang lebih awal dari tantangan ini.
Angka-angka disediakan sebagai dua input terpisah. Output adalah
0
atau1
.Contoh
Penjelasan
sumber
Mathematica, 58 byte
Penjelasan:
Ini adalah fungsi anonim.
Pertama,
IntersectingQ
periksa apakah dua daftar berpotongan. Tetapi inputnya adalah angka, bukan daftar, jadi tetap tidak dievaluasi. Misalnya, jika inputnya adalah2013
dan2014
, kemudianIntersectingQ@##&
kembaliIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
adalah fungsi anonim lain yang mengambil bilangan bulat, mendapatkan daftar faktor prima tanpa pengulangan, mengambil set daya, menghapus set kosong, dan kemudian mengambil jumlah setiap set. JadiTr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
kembali{3, 11, 61, 14, 64, 72, 75}
.Kemudian petakan di
Tr/@Rest@Subsets[#&@@@FactorInteger@#]&
atas ekspresiIntersectingQ[2013, 2014]
.Tr/@Rest@Subsets[#&@@@FactorInteger@#]&[2013]
danTr/@Rest@Subsets[#&@@@FactorInteger@#]&[2014]]
daftar, sehingga kami bisa mendapatkan hasil kumpulkan saat ini.sumber
IntersectingQ
pertama itu luar biasa! :)PARI / GP , 98 byte
Factor, ambil primes (
[,1]
), loop over himpunan bagian kosong, jumlah, dan uniq, kemudian memotong hasil ini untuk dua angka. Nilai yang dikembalikan adalah jumlah persimpangan, yang benar kecuali mereka adalah 0.sumber
APL (Dyalog Extended) ,
2317 byte SBCS-5 Terima kasih kepada ngn
Fungsi infiks diam-diam anonim.
Cobalah online!
⍥{
...}
terapkan fungsi anonim berikut untuk kedua argumen:⍭
faktor utama⍤
kemudian∪
yang unik dari mereka0+⍀.,
pengurangan tabel penambahan nol digabungkan untuk setiap faktor∊
ϵ daftar (ratakan)∩
persimpangan⍤
kemudian≢
penghitungan dari mereka1<
apakah ada lebih dari satu? (satu karena jumlah tanpa faktor)sumber
p+.×⊤1↓⍳2*≢p←
->1↓∊(⊢,+)/0,⍨
1↓∊∘.+/0,¨
1↓∊0∘.+.,
produk inouter - seberapa sering Anda melihat itu :)⍥
benar, ini harus bekerja juga:1<∘≢∩⍥{∊0∘.+.,∪⍭⍵}
05AB1E ,
108 byte-2 byte terima kasih kepada @Emigna .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
f€æO`å¦à
harus bekerja untuk 8.Japt, 12 byte
Jalankan secara online
sumber
Python 3 , 206 byte
Ini adalah fungsi lambda (m), yang mengambil dalam 2 angka dan mengembalikan set yang berisi jumlah faktor prima yang sama-sama mereka miliki. Dalam Python ini adalah nilai kebenaran saat tidak kosong, dan nilai falsey saat kosong.
Sunting: Ternyata jawaban asli saya tidak berfungsi untuk input utama, seperti yang ditunjukkan oleh @ JoKing. Ini telah diperbaiki (bersama dengan beberapa bug lain) dengan biaya tragis 40 byte.
Penjelasan cepat menggunakan komentar:
Cobalah online!
sumber
5,6
, karena tidak menangani input utamaAPL (NARS), 50 char, 100 byte
di sini π akan menemukan berbagai faktor pada argumennya;
akan menjadi fungsi yang menemukan semua himpunan bagian ... saya harus mengatakan bahwa tampaknya {⍵operator itsArguments} ¨ (untuk setiap kiri) dan ¨ (untuk setiap kanan) dapat meniru loop dengan jumlah siklus tetap dan ¨¨ ok di untuk melihat himpunan bagian dari satu set ... cara ini tampaknya mengurangi simbol dalam menggambarkan loop ...; uji
Satu analisis kecil:
sumber
Japt
-¡
, 14 byteDisimpan 3 byte berkat @Shaggy
Cobalah
sumber
ÎfUÌ l
atau, lebih pendek lagirf l
,.rø
akan menjadi cara terpendek untuk melakukan itu, tetapi Oliver mengalahkan Anda untuk itu.Jelly ,
189 byteCobalah online!
Terima kasih kepada @Jonathan Allan untuk -9 dan bantuan yang luar biasa :).
Mengambil input sebagai array dari dua elemen. Penjelasan kode:
¹
sumber
,
. ItuẒƇ
berlebihan, tidak ada faktor prima non-prima. MakaÆFḢ€
adilÆf
, kecuali bahwa yang terakhir memberi kita pengulangan yang mungkin benar-benar kita butuhkan, misalnya26=2*13
dan125=5*5*5
sementara2+13=5+5+5
. Namun dengan itu,Ẇ
tidak cukup baik, misalnya alih-alih26
menggunakan182=2*7*13
yang juga harus menemukan itu2+13=5+5+5
tetapi tidak - sebaliknya kita ingin set-daya (ŒP
) tanpa elemen memimpin, kosong, (kita dapat menggunakanḊ
).S€
di sini dapat diganti dengan§
. - Anda mungkin dapat menyimpan byte dengan$
danƊ
-.)
dan dengan perbaikan saya untuk membuatnya bekerja dengan benar (plus menggantiœ&
denganf
) kodenya adalah 9 byte:ÆfŒPḊ§)f/
coba-cobaGaia ,
1611 byteCobalah online!
Fungsi teratas (baris pertama) menghitung jumlah dari powerset faktor prima, dan fungsi kedua menemukan jika salah satu elemen dari persimpangan adalah nol.
sumber