Un modo è quello di calcolare la loro GCD e verificare se è 1.Qual è il modo più veloce per verificare se due numeri dati sono coprimi?
C'è qualche modo più veloce?
Un modo è quello di calcolare la loro GCD e verificare se è 1.Qual è il modo più veloce per verificare se due numeri dati sono coprimi?
C'è qualche modo più veloce?
L'algoritmo Euclideo (calcola gcd
) è molto veloce. Quando due numeri vengono disegnati in modo uniforme a caso da [1, n]
, il numero medio di passaggi per calcolare il loro gcd
è O(log n)
. Il tempo medio di calcolo richiesto per ogni passaggio è quadratico nel numero di cifre.
Esistono alternative che offrono prestazioni migliori (ad esempio, ogni passaggio è subquadratico nel numero di cifre), ma sono efficaci solo su numeri interi molto grandi. Vedi, ad esempio, On Schönhage's algorithm and subquadratic integer gcd computation.
se si esegue su una macchina per cui la divisione/resto è significativamente più costosa rispetto ai turni, prendere in considerazione binary GCD.
Grazie, interessante lettura –
sì, un ottimo articolo lì. – Lazer
L'ho appena implementato in f # e più di due volte più veloce del tradizionale GCD di Euclid, non è possibile fornire numeri esatti in quanto vi sono altri codici che inquinano le mie misurazioni, tuttavia è> 2x più veloce. Buona scoperta, Jason. Aggiornamento – gatapia
Mi piacerebbe commentare che è un po 'grossolano misurare la complessità degli algoritmi aritmetici senza tenere conto dei costi delle operazioni aritmetiche. –
Il numero peggiore di passaggi è O (log n) anche quando due numeri sono voci successive nella sequenza di Fibonacci. –
@Pavel Shved: ho preso in considerazione il costo. cf. la frase "Il tempo medio di calcolo richiesto per ogni passaggio è quadratico nel numero di cifre." – jason