Tantangan
Tugas Anda adalah menulis sebuah program atau fungsi yang, diberi bilangan bulat positif N , menemukan semua bilangan bulat positif kurang dari atau sama dengan N yang dapat dinyatakan sebagai kekuatan sempurna dalam lebih dari satu cara.
Definisi
Kekuatan sempurna didefinisikan sebagai angka yang saya temukan oleh m ^ k , di mana:
- m dan i adalah bilangan bulat positif
- m! = k
Uji Kasus
input -> output 1000 -> 16, 64, 81, 256, 512, 625, 729 56 -> 16 999 -> 16, 64, 81, 256, 512, 625, 729 81 -> 16, 64, 81 1500 -> 16, 64, 81, 256, 512, 625, 729, 1024, 1296
Harap berikan versi yang dapat dibaca dan dikomentari juga.
code-golf
math
number
number-theory
fR0DDY
sumber
sumber
Jawaban:
Mathematica: 103 karakter
Spasi dapat dihapus
Pemakaian:
sumber
Jelly , 11 byte yang berarti, tantangan tanggal bahasa
Cobalah online!
Inilah solusi yang sama sekali berbeda. Yang satu ini merupakan campuran yang aneh dari yang efisien dan tidak efisien, menggunakan algoritma inti yang efisien dalam pembungkus yang sangat tidak efisien (sedemikian rupa sehingga tidak dapat menangani angka yang sangat besar). Seperti sebelumnya, semua spasi putih tidak ada artinya.
Begini cara kerjanya.
Ḋ
(yang muncul beberapa kali) adalah daftar angka dari 2 hingga input inklusif:Pengamatan dasar di sini adalah bahwa angka adalah kekuatan sempurna dalam banyak hal, hanya jika itu adalah kekuatan sempurna dengan eksponen komposit (yang bukan 1). Kami membuat daftar yang basisnya dari 2 ke input, dan eksponen adalah bilangan komposit dari 4 ke input; ini sangat lambat karena menghasilkan beberapa angka yang sangat besar, yang semuanya merupakan jawaban untuk pertanyaan itu. Maka kami hanya menyimpan jawaban yang ada dalam jangkauan.
Sangat mudah untuk memodifikasi ini menjadi jawaban yang sangat efisien, dengan mencari tahu apa daya maksimum dalam jangkauan dan tidak mengulangi lebih jauh, tetapi itu akan menjadi lebih banyak byte, dan ini adalah kode-golf.
sumber
Perl: 68 karakter
Mendapat maksimum (1000) dalam
$N
dan mengembalikan jawaban dalam@a
.Untuk keseluruhan program, saya membutuhkan 18 karakter lagi:
sumber
sort
sebelumnyagrep
. Ngomong-ngomong, aku belum pernah melihat codepad. Terima kasih.Ruby - 101 karakter (tanpa spasi)
Bekerja
1 <= limit <= 100,000,000
dalam 5 detik.Uji
sumber
Jeli , 13 karakter yang berarti, tantangan tanggal bahasa
Cobalah online!
Semua spasi putih di sini tidak signifikan. Saya menggunakannya untuk menunjukkan struktur jawaban saya, ketika pertanyaan diajukan.
Begini cara kerjanya:
Jadi misalnya, ketika menguji n = 256, kami memeriksa berapa kali masing-masing angka dari 2 hingga 256 dibagi menjadi 256. Satu-satunya angka yang membagi lebih dari sekali adalah 2 (yang membagi 8 kali), 4 (yang membagi 4 kali), 8 (yang membagi dua), dan 16 (yang membagi dua). Jadi, ketika kita meningkatkan jumlah divisi ke kekuatan yang ditentukan di sana, kita mendapatkan:
Ini menghasilkan nilai asli, 256, beberapa kali sama dengan cara 256 adalah kekuatan sempurna, ditambah satu (elemen terakhir menghasilkan 256 karena 256 = 256¹). Jadi jika kita melihat 256 lebih dari dua kali dalam array (dan kita lakukan dalam kasus ini; 8² adalah 64 tetapi elemen "menarik" lainnya semua menghasilkan 256), itu harus menjadi kekuatan yang sempurna.
sumber