J, 50 40 38 37 karakter
f=:3 :'+/y<:}.~.,(~:/**/)~p:i._1&p:y'
Pemakaian:
f 1
0
f 62
18
f 420
124
f 10000
2600
Dengan terima kasih kepada FUZxxl .
Uji kinerja
showtotal_jpm_ ''[f 1[start_jpm_ ''
Time (seconds)
┌───────┬──────┬────────┬────────┬─────┬────┬───┐
│name │locale│all │here │here%│cum%│rep│
├───────┼──────┼────────┼────────┼─────┼────┼───┤
│f │base │0.000046│0.000046│100.0│100 │1 │
│[total]│ │ │0.000046│100.0│100 │ │
└───────┴──────┴────────┴────────┴─────┴────┴───┘
showtotal_jpm_ ''[f 1[f 62[start_jpm_ ''
Time (seconds)
┌───────┬──────┬────────┬────────┬─────┬────┬───┐
│name │locale│all │here │here%│cum%│rep│
├───────┼──────┼────────┼────────┼─────┼────┼───┤
│f │base │0.000095│0.000095│100.0│100 │2 │
│[total]│ │ │0.000095│100.0│100 │ │
└───────┴──────┴────────┴────────┴─────┴────┴───┘
showtotal_jpm_ ''[f 1[f 62[f 420[start_jpm_ ''
Time (seconds)
┌───────┬──────┬────────┬────────┬─────┬────┬───┐
│name │locale│all │here │here%│cum%│rep│
├───────┼──────┼────────┼────────┼─────┼────┼───┤
│f │base │0.000383│0.000383│100.0│100 │3 │
│[total]│ │ │0.000383│100.0│100 │ │
└───────┴──────┴────────┴────────┴─────┴────┴───┘
showtotal_jpm_ ''[f 1[f 62[f 420[f 10000[start_jpm_ ''
Time (seconds)
┌───────┬──────┬────────┬────────┬─────┬────┬───┐
│name │locale│all │here │here%│cum%│rep│
├───────┼──────┼────────┼────────┼─────┼────┼───┤
│f │base │0.084847│0.084847│100.0│100 │4 │
│[total]│ │ │0.084847│100.0│100 │ │
└───────┴──────┴────────┴────────┴─────┴────┴───┘
showtotal_jpm_ ''[f 1[f 62[f 420[f 10000[f 50000[start_jpm_ ''
Time (seconds)
┌───────┬──────┬────────┬────────┬─────┬────┬───┐
│name │locale│all │here │here%│cum%│rep│
├───────┼──────┼────────┼────────┼─────┼────┼───┤
│f │base │5.014691│5.014691│100.0│100 │5 │
│[total]│ │ │5.014691│100.0│100 │ │
└───────┴──────┴────────┴────────┴─────┴────┴───┘
Saya bukan ahli teori seperti yang terlihat di sini di masa lalu, tapi saya pikir kompleksitas waktu adalah sesuatu seperti O (n p 2 ) di mana np adalah jumlah bilangan prima hingga dan termasuk nomor input n. Ini didasarkan pada asumsi bahwa kompleksitas metode saya (menghasilkan tabel perkalian yang sangat besar) jauh melebihi kompleksitas fungsi pembangkit utama yang dibangun pada J.
Penjelasan
f=:3 :'...'
mendeklarasikan kata kerja (monadik). Input ke kata kerja diwakili oleh y
dalam definisi kata kerja.
p:i._1&p:y
Kata p:
kerjanya adalah kata kerja multi-tujuan bilangan prima, dan digunakan dalam dua cara berbeda di sini: _1&p:y
mengembalikan jumlah bilangan prima kurang dari y
itu p:i.
menghasilkan setiap dari mereka. Menggunakan 10 sebagai input:
p:i._1&p:10
2 3 5 7
(~:/**/)~
menghasilkan tabel yang saya bicarakan sebelumnya. */
menghasilkan tabel perkalian, ~:/
menghasilkan tabel tidak sama (untuk menghilangkan kotak) dan keduanya dikalikan bersama. Menggunakan output kami sebelumnya sebagai input:
*/~2 3 5 7
4 6 10 14
6 9 15 21
10 15 25 35
14 21 35 49
~:/~2 3 5 7
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
(~:/**/)~2 3 5 7
0 6 10 14
6 0 15 21
10 15 0 35
14 21 35 0
}.~.,
sekarang kita mengubah angka menjadi satu daftar, ,
dapatkan nilai unik ~.
dan hapus 0 di awal}.
}.~.,(~:/**/)~2 3 5 7
6 10 14 15 21 35
y<:
perbandingan dengan input asli untuk memeriksa nilai mana yang valid:
10<:6 10 14 15 21 35
1 1 0 0 0 0
+/
dan kemudian jumlahkan itu untuk mendapatkan jawabannya.
+/1 1 0 0 0 0
2