What's wrong in it?

1 回表示 (過去 30 日間)
SAYANTAN BHANJA
SAYANTAN BHANJA 2017 年 7 月 25 日
コメント済み: SAYANTAN BHANJA 2017 年 7 月 26 日
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.
function LCM=smallest_multiple(n)
%
x=(1:1:n);
r=1;
i=1;
while(i<=length(x))
r=(lcm(r,x(i)));
i=i+1;
end
if(r>intmax('uint64'))
LCM=uint64(0);
else
LCM=uint64(r);
end
end
GIVING ERROR FOR INPUT 45 .
  2 件のコメント
per isakson
per isakson 2017 年 7 月 25 日
I cannot reproduce the error on R2016a 64bit.
LCM=smallest_multiple(45)
returns
Warning: Inputs contain values larger than the largest consecutive flint.
Result may be inaccurate.
...
LCM =
0
ES
ES 2017 年 7 月 26 日
What is your error? Is it about memory? What MATLAB version do you use? I have tried your script in R2014B-64 bit. It works well.

サインインしてコメントする。

採用された回答

Walter Roberson
Walter Roberson 2017 年 7 月 26 日
Change your x and r to
x=uint64(1:1:n);
r=uint64(1);
  1 件のコメント
SAYANTAN BHANJA
SAYANTAN BHANJA 2017 年 7 月 26 日
Thanks a lot sir..... It works perfectly now

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeElementary Polygons についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by