Mathematica, 70 69 byte
1##&@@(Prime[BitXor[PrimePi@#+1,1]-1]^#2&)@@@FactorInteger@#/._@_->1&
Una funzione senza nome che accetta e restituisce un numero intero. Genera un errore sull'input 1ma calcola comunque il risultato corretto.
Spiegazione
Come al solito, a causa di tutto lo zucchero sintattico, l'ordine di lettura è un po 'divertente. Un &sui definisce giuste una funzione senza nome e suoi argomenti sono indicati da #, #2, #3, etc.
...FactorInteger@#...
Iniziamo prendendo in considerazione l'input. Questo dà una lista di coppie {prime, exponent}es ingresso 12dà {{2, 2}, {3, 1}}. In qualche modo in modo inopportuno, 1dà {{1, 1}}.
(...&)@@@...
Questo applica la funzione a sinistra all'elenco di numeri interi al livello 1, ovvero la funzione viene chiamata per ogni coppia, passando il primo e l'esponente come argomenti separati, quindi restituisce un elenco dei risultati. (Questo è simile al mapping della funzione sull'elenco, ma ricevere due argomenti separati è più conveniente che ricevere una coppia.)
...PrimePi@#...
Calcoliamo il numero di numeri primi fino a, incluso l'ingresso (primo) incluso, utilizzando l'integrato PrimePi. Questo ci dà l'indice del numero primo.
...BitXor[...+1,1]-1...
Il risultato viene incrementato, XOR con 1e nuovamente diminuito. Questo scambia 1 <-> 2, 3 <-> 4, 5 <-> 6, ..., cioè tutti gli indici basati su 1. Si noti che l'input 1produrrà 0per PrimePicui viene quindi mappato -1in questo processo. Ci occuperemo più tardi.
...Prime[...]^#2...
Ora ottiene il n ° primo (dove n è il risultato del calcolo precedente), che è il primo correttamente scambiati, ed innalziamola alla potenza del primo originale nel fattorizzazione dell'ingresso. A questo punto Prime[-1]verrà generato un errore ma verrà restituito non valutato. La potenza in questo caso è 1che l'intero processo finora produce {Prime[-1]}input 1e un elenco di potenze primi corrette per tutti gli altri input.
1##&@@...
Successivamente, moltiplichiamo semplicemente tutti i poteri principali. 1##&è un trucco da golf standard per la Timesfunzione. Vedi questo suggerimento (sezione "Sequenze di argomenti") per come funziona.
Infine, dobbiamo occuparci degli input 1per i quali tutto quanto sopra è risultato Prime[-1]. Possiamo facilmente risolverlo con una semplice regola di sostituzione. Ricorda che f@xè l'abbreviazione di f[x]. Vogliamo solo abbinare qualsiasi espressione di quella forma (poiché tutti gli altri risultati saranno numeri interi, cioè espressioni atomiche), e sostituirlo con un 1:
.../._@_->1
Qui, /.è l'abbreviazione di ReplaceAll, _@_è un modello per qualsiasi forma f[x](cioè qualsiasi espressione composta con un singolo figlio) e ->1dice "sostituisci con 1".