mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-04 07:29:47 +08:00

* chore: Switch to Node 20 + Vitest * chore: migrate to vitest mock functions * chore: code style (switch to prettier) * test: re-enable long-running test Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime! see #1193 * chore: code style * chore: fix failing tests * Updated Documentation in README.md * Update contribution guidelines to state usage of Prettier * fix: set prettier printWidth back to 80 * chore: apply updated code style automatically * fix: set prettier line endings to lf again * chore: apply updated code style automatically --------- Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com> Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
64 lines
1.7 KiB
JavaScript
64 lines
1.7 KiB
JavaScript
/**
|
||
* Count the numbers divisible by ‘M’ in a given range
|
||
*
|
||
* @see {@link https://www.tutorialspoint.com/count-the-numbers-divisible-by-m-in-a-given-range-in-cplusplus}
|
||
*
|
||
* We have 3 numbers A, B, M as inputs, A and B defines the numbers range [A, B]
|
||
* Count the total number of divisibles in that range by number M
|
||
*
|
||
* @author Chetan07j
|
||
*/
|
||
|
||
/**
|
||
* Function to find total divisibles in given range
|
||
*
|
||
* @param {number} num1
|
||
* @param {number} num2
|
||
* @param {number} divider
|
||
*
|
||
* @returns {number} count of total number of divisibles
|
||
*/
|
||
const countNumbersDivisible = (num1, num2, divider) => {
|
||
if (
|
||
typeof num1 !== 'number' ||
|
||
typeof num2 !== 'number' ||
|
||
typeof divider !== 'number'
|
||
) {
|
||
throw new Error('Invalid input, please pass only numbers')
|
||
}
|
||
|
||
// Valid number range is num1 < num2, otherwise throw error
|
||
if (num1 > num2) {
|
||
throw new Error(
|
||
'Invalid number range, please provide numbers such that num1 < num2'
|
||
)
|
||
}
|
||
|
||
// if divider is out of range then return 0
|
||
// as in such case no divisible exists
|
||
if (divider > num2) {
|
||
return 0
|
||
}
|
||
|
||
// Find the number of multiples of divider for num1 and num2
|
||
// integer division part
|
||
const num1Multiplier = num1 / divider
|
||
const num2Multiplier = num2 / divider
|
||
|
||
// The count of numbers divisibles by divider between num1 and num2
|
||
let divisibleCount = num2Multiplier - num1Multiplier
|
||
|
||
// If num1 is divisible by divider then, edge case for num1 is ignored
|
||
// which results in 1 less count
|
||
// to fix that we add +1 in this case
|
||
if (num1 % divider === 0) {
|
||
divisibleCount++
|
||
}
|
||
|
||
// As it includes integer division meaning floating values
|
||
// to get exact count Math.round() is added
|
||
return Math.round(divisibleCount)
|
||
}
|
||
|
||
export { countNumbersDivisible }
|