Saya pikir paling mudah untuk menjelaskan tantangan ini secara berurutan. Mulai dengan nomor input N dan:
- Temukan faktor prima tertinggi
- Memeriksa nomor di atas dan di bawah N dan melihat apakah faktor utama tertinggi adalah lebih tinggi (yaitu faktor utama tertinggi N-1 dan / atau N + 1 lebih tinggi dari faktor N .
- Lanjutkan untuk memeriksa angka yang lebih tinggi dan / atau lebih rendah tetangga N dalam arah di mana faktor tertinggi meningkat ( (N-2, N-3 ...) dan / atau (N + 2, N + 3 ...) dan sebagainya di)
- Setelah tidak ada faktor prima di kedua arah yang lebih tinggi dari yang telah kami temukan, kami berhenti dan menampilkan faktor prima tertinggi yang kami temui.
Mari kita lihat sebuah contoh:
245
memiliki faktor utama 5, 7, 7
. Tetangganya adalah:
244 -> 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
Faktor prima tertinggi meningkat di kedua arah, jadi kita harus melihat tetangga berikutnya:
243 -> 3, 3, 3, 3, 3
244 -> 2, 2, 2, 61
245 -> 5, 7, 7
246 -> 2, 3, 41
247 -> 13, 19
Faktor prima tertinggi sekarang menurun di kedua arah, sehingga faktor prima tertinggi yang kami temui adalah 61
, dan karenanya harus dikembalikan.
Contoh lain:
Mari lihat 1024
. Faktor utamanya adalah 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
. Faktor utama tetangga terdekatnya adalah:
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
Faktor prima tertinggi meningkat di kedua arah, dari 2
ke 31
atau 41
. Mari kita lihat tetangga:
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
Faktor prima tertinggi 1022
adalah 73
, dan faktor prima tertinggi 1026
adalah 19
. Karena 19
lebih rendah daripada 41
kita tidak tertarik. Angka ini masih bertambah untuk angka yang lebih kecil dari N, jadi kami akan memeriksa yang berikutnya ke arah itu :
1021 -> 1021
1022 -> 2, 7, 73
1023 -> 3, 11, 31
1024 -> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
1025 -> 5, 5, 41
1026 -> 2, 3, 3, 19
1021
adalah prime, dan prime tertinggi yang kami temui, jadi harus dikembalikan.
Aturan:
- Anda hanya akan mendapatkan positif
N
lebih besar dari1
dan lebih kecil dari2^31-2
. - Format input dan output adalah opsional, tetapi angkanya harus dalam basis 10.
- Anda harus terus mencari bilangan prima yang lebih tinggi selama nilai tertinggi meningkat ke arah itu. Arahnya tidak tergantung satu sama lain.
Kasus uji:
Format: N, highest_factor
2, 3
3, 3
6, 7
8, 11
24, 23
1000, 997
736709, 5417
8469038, 9431
2
untuk N. Kita kemudian mendapatkan5
untuk N-1 dan61
untuk N +1. Lalu kita dapatkan19
untuk N-2 dan67
untuk N + 2. Haruskah kita terus mencoba angka yang lebih rendah, sejak19>5
atau berhenti, sejak5<61
? Yaitu maksima disimpan per-sisi? (Saya tidak yakin apakah contohnya secara matematis dimungkinkan.)N=2
sebenarnya tampaknya menjadi tepi kasus karena1
tidak memiliki faktor prima, jadi tidak ada faktor prima maksimum yang dapat kita bandingkan untuk memutuskan apakah kita harus melanjutkan.Jawaban:
Mathematica,
8274 byteTerima kasih kepada Martin Ender karena telah menghemat 8 byte!
Fungsi tanpa nama mengambil input integer dan mengembalikan integer.
±n_:=#//.x_/;l[t=x+n]>l@x:>t
mendefinisikan fungsi unary±
yang terus meningkatkan input integer fungsi globaln
selama faktor prima terbesar meningkat. (Fungsi faktor prima terbesar didefinisikan denganl=FactorInteger[#][[-1,1]]&
.){±-1,±1}
Oleh karena itu berlaku fungsi itu dua kali untuk bilangan bulat input, dengan kenaikan-1
dan lagi dengan kenaikan1
. Kemudian,Max@@(...l...)/@...
ambil yang lebih besar dari dua faktor prima terbesar yang ditemukan.Pengajuan sebelumnya:
sumber
@@@
(dan Anda dapat menggunakannya dil@x
sana):Max@@(±n_:=#//.x_/;l[t=x+n]>l@x:>t;l=FactorInteger[#][[-1,1]]&)/@{±-1,±1}&
Perl, 137 byte
122 byte kode + 15 byte untuk
-p
dan-Mntheory=:all
.Untuk menjalankannya:
Jika Anda belum
ntheory
menginstal, Anda dapat menginstalnya dengan mengetik(echo y;echo) | perl -MCPAN -e 'install ntheory'
di terminal Anda.sumber
Ruby, 99 byte
Penjelasan:
sumber