Mathematica, 70 69 byte
1##&@@(Prime[BitXor[PrimePi@#+1,1]-1]^#2&)@@@FactorInteger@#/._@_->1&
Fungsi tanpa nama yang mengambil dan mengembalikan integer. Itu melempar kesalahan pada input 1tetapi masih menghitung hasil yang benar.
Penjelasan
Seperti biasa, karena semua gula sintaksis, urutan bacaannya agak lucu. Sebuah &pada mendefinisikan kanan fungsi yang tidak disebutkan namanya dan argumen yang disebut dengan #, #2, #3, dll
...FactorInteger@#...
Kami mulai dengan memfaktorkan input. Ini memberikan daftar pasangan {prime, exponent}mis. Input 12memberi {{2, 2}, {3, 1}}. Agak nyaman, 1memberi {{1, 1}}.
(...&)@@@...
Ini menerapkan fungsi di sebelah kiri ke daftar bilangan bulat di level 1, yaitu fungsi dipanggil untuk setiap pasangan, melewati bilangan prima dan eksponen sebagai argumen yang terpisah, dan kemudian mengembalikan daftar hasil. (Ini mirip dengan memetakan fungsi di atas daftar, tetapi menerima dua argumen terpisah lebih nyaman daripada menerima pasangan.)
...PrimePi@#...
Kami menghitung jumlah bilangan prima hingga dan termasuk input (prima) menggunakan built-in PrimePi. Ini memberi kita indeks prima.
...BitXor[...+1,1]-1...
Hasilnya bertambah, XOR'ed dengan 1dan dikurangi lagi. Ini swap 1 <-> 2, 3 <-> 4, 5 <-> 6, ..., yaitu semua indeks berbasis 1. Perhatikan bahwa masukan 1akan menghasilkan 0untuk PrimePiyang kemudian dipetakan ke -1dalam proses ini. Kami akan mengatasinya nanti.
...Prime[...]^#2...
Kita sekarang mendapatkan perdana ke- n (di mana n adalah hasil dari perhitungan sebelumnya), yang merupakan perdana yang ditukar dengan benar, dan menaikkannya ke kekuatan prime asli dalam factorisation dari input. Pada titik ini Prime[-1]akan terjadi kesalahan tetapi akan kembali sendiri tidak dievaluasi. Kekuatan dalam hal ini adalah 1sehingga seluruh proses sejauh ini menghasilkan {Prime[-1]}input 1dan daftar kekuatan utama yang benar untuk semua input lainnya.
1##&@@...
Selanjutnya, kita gandakan semua kekuatan utama. 1##&adalah trik golf standar untuk Timesfungsinya. Lihat tip ini (bagian "Urutan argumen") untuk cara kerjanya.
Akhirnya, kita perlu berhati-hati terhadap masukan 1yang menghasilkan semua hal di atas Prime[-1]. Kami dapat dengan mudah memperbaikinya dengan aturan penggantian yang sederhana. Ingat itu f@xkependekan dari f[x]. Kami hanya ingin mencocokkan ekspresi apa pun dari bentuk itu (karena semua hasil lainnya akan berupa bilangan bulat, yaitu ekspresi atomik), dan ganti dengan 1:
.../._@_->1
Di sini, /.kependekan dari ReplaceAll, _@_adalah pola untuk segala bentuk f[x](yaitu setiap ekspresi majemuk dengan anak tunggal) dan ->1mengatakan "ganti dengan 1".