2017-10-20 1 views
4

J'essaie de trouver le plus petit nombre qui soit divisible par 1:20. J'ai créé une fonction et c'est ce que j'ai:Plus petit multiple de 1:20 - Comment puis-je le rendre plus rapide?

smallestN<- function(a,b) { 
    i<- 1 
    repeat { 
    if (all(i%%a:b == 0)) { 
     break 
    } else { 
     i<-i+1 
    } 
    } 
    return(i) 
} 

Il fonctionne très bien pour les petits intervalles grande, mais pour 01h20, il prend beaucoup de temps. Comment puis-je améliorer mon code pour le rendre plus rapide?

Répondre

5

Je pense que vous êtes après le Least Common Multiple. Il y a plusieurs façons de calculer, mais pour vous commencer, vous pouvez regarder le paquet numbers

library(numbers) 

mLCM(1:20) 
# [1] 232792560 

Il y aura des implémentations plus rapides qui utilisent C/C++, mais pour le scénario 1:20 c'est rapide.

+0

Merci! Beaucoup plus simple. –

+0

@ ana.la - de rien. Si cela répond à votre question, vous pouvez/devez appuyer sur la case «cocher» sous les flèches de vote pour accepter la réponse. – SymbolixAU