Write a function called smallest_multiple

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder. Write a function called smallest_multiple that returns a uint64, the smallest positive number that is evenly divisible by all of the numbers from 1 to n where n is a positive integer scalar and is the only input argument of the function. If the result would be greater than what can be represented as a uint64, the function returns 0.

Respuestas (2)

Srishti Saha
Srishti Saha el 13 de Mayo de 2018
Here is a solution that worked for me:
%%alternative solution to smallest multiple
function r = smallest_multiple(k)
r = uint64(1);
for n = 1:k
r = r * (n / gcd(r,n));
end
if r == intmax('uint64')
r = uint64(0);
end
end

4 comentarios

Walter Roberson
Walter Roberson el 13 de Mayo de 2018
We discourage people giving complete answers for homework questions.
Jan
Jan el 13 de Mayo de 2018
The question contains: "greater than what can be represented as a uint64". You test for equality only. This might seem to be a tiny difference, but it is very hard to catch "greater than intmax('uint64')" reliably.
Walter Roberson
Walter Roberson el 13 de Mayo de 2018
Editada: Walter Roberson el 3 de Jun. de 2018
The test is okay except for the case where the smallest multiple is exactly equal to intmax('uint64') which is 18446744073709551615 = 65537*(641*(17*(3*5)*257)*6700417) .
In any case where the result would be bigger than intmax('uint64') then the multiplications in the for loop would "saturate" at exactly intmax('uint64')
Ranil Fernando
Ranil Fernando el 3 de Jun. de 2018
Editada: Ranil Fernando el 3 de Jun. de 2018
My code is working outside the grader for n=13 without taking a longer time. But within the grader it fails for even 2. Someone please give me a hand here.
function multiN = smallest_multiple(n)
mod2N = 0;
multiN = uint64(n);
while all(mod2N) == 0
multiN = multiN + 1;
mod2N = zeros(1,n);
for ii=1:n
if mod(multiN,ii) == 0
mod2N(ii) = 1;
elseif multiN == intmax('uint64')
multiN = uint64(0);
end
end
end

Iniciar sesión para comentar.

Preguntada:

el 4 de Mzo. de 2018

Editada:

el 3 de Jun. de 2018

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by