2016-07-06 2 views
4

On nous donne trois chiffres, L, R et K. Nous devons compter les numéros entre L et R (y compris les deux) qui sont divisibles par K.Compte un multiple d'un nombre dans une plage donnée avec une complexité O (1)?

Est-il possible de résoudre avec O (1) la complexité ?

C'est un programme très simple je sais, peut être facilement fait avec une boucle. Mais je me demandais s'il est possible d'appliquer une sorte de formule ou quelque chose pour connaître directement le nombre de nombres qui sont divisibles par K entre L et R.

Par exemple, count = (R - L + 1)/K fonctionnera probablement dans certains des cas.

Quelque chose?

+0

S'il vous plaît n'utilisez pas les liens dans les questions sur SO car ils peuvent mourir dans le futur et la question devient inutile. S'il vous plaît décrire la question ici. –

+0

Votre exemple fonctionnera dans certains cas - tout ce que vous avez besoin de faire vérifier les cas de fin (que 'r% k = 0' ou non, etc.) –

+0

Le titre est très trompeur car décrit un problème probablement beaucoup plus difficile. Vous voulez compter ** multiples ** d'un nombre dans une plage donnée. –

Répondre

3

Voici votre solution.

quo1=l/k; 
quo2=r/k; 
rem=l%k; 
if(rem==0) 
{ 
    count=quo2-quo1+1; 
} 
else 
{ 
    count=quo2-quo1; 
    } 
+2

Vous pouvez à la place faire 'r/k - (l - 1)/k' (en supposant que l, r, k sont naturels) –

+0

Cool, cela semble plus simple. –