← Catalogo
PPER
PyJS

Partial Permutations

CombinatoricsGenome Rearrangements

Pagina originale su rosalind.info

Descrizione

Una permutazione parziale P(n, k) è il numero di modi in cui si possono ordinare k elementi scelti da un insieme di n, tenendo conto dell'ordine. La formula è P(n, k) = n! / (n-k)! = n × (n-1) × ... × (n-k+1).

Given

Interi positivi n e k tali che 100 ≥ n > 0 e 10 ≥ k > 0.

Return

Il numero totale di permutazioni parziali P(n, k), modulo 1.000.000.

Sample Dataset

21 7

Sample Output

51200

La mia esecuzione

08/24/2026 11:24:47

Input · dataset.txt

87 8

Output · run_log.txt

OK
862400

Esegui nel browser · Pyodide

Mostra il codice sorgente (problem.py)
#http://rosalind.info/problems/pper/

MODULO = 1000000

def lettura(filename):
    with open(filename) as f:
        n, k = f.readline().split()
    return int(n), int(k)

def main():
    n, k = lettura("dataset.txt")
    risultato = 1
    for i in range(n - k + 1, n + 1):
        risultato = (risultato * i) % MODULO
    print(risultato)

if __name__ == "__main__":
    # execute only if run as a script
    main()

Soluzione JavaScript

Esegui ora, live

Mostra il codice sorgente
// Partial Permutations (Rosalind ID: PPER) - soluzione JavaScript
// indipendente, non una trascrizione di problem.py: stesso calcolo
// (P(n,k) = n! / (n-k)! mod 1.000.000, tramite prodotto dei k fattori
// consecutivi n-k+1 .. n), riscritta in modo idiomatico per JS.
//
// BigInt: n può arrivare fino a 100 (vincolo Rosalind per questo
// problema), quindi il prodotto intermedio prima del modulo può
// superare Number.MAX_SAFE_INTEGER - stesso motivo già visto in
// fib.mjs/fibd.mjs/sset.mjs.
//
// Contratto: riceve il contenuto testuale di dataset.txt, restituisce
// l'output testuale (stessa forma dell'output Python).
const MODULO = 1000000n;

export default function solve(datasetText) {
  const prima_riga = datasetText.split("\n")[0].trim();
  const parti = prima_riga.split(/\s+/);

  if (parti.length !== 2 || parti.some((p) => !/^\d+$/.test(p))) {
    throw new Error(`Input non valido: attesi due interi "n k", ricevuto "${prima_riga}"`);
  }

  const n = Number(parti[0]);
  const k = Number(parti[1]);

  if (k > n) {
    throw new Error(`Input non valido: k (${k}) non può essere maggiore di n (${n})`);
  }

  let risultato = 1n;
  for (let i = n - k + 1; i <= n; i++) {
    risultato = (risultato * BigInt(i)) % MODULO;
  }

  return `${risultato}\n`;
}