Best way to determine if number is triangular number?

17 ビュー (過去 30 日間)
Richard Crozier
Richard Crozier 2012 年 9 月 6 日
Hello,
I would like to test if an integer is a triangular number, and am wondering what the best way to achieve this is. I am aware that a triangular number is given by
x = n(n+1)/2
And that x is triangular if and only if 8x + 1 is a square.
However, what is the best way to actually test this in Matlab, giving consideration to floating point arithmetic?
I can think of methods like:
check x is an integer find if sqrt(8x + 1) is an integer to some floating point error
but there must be better ways.
  2 件のコメント
John D'Errico
John D'Errico 2012 年 9 月 6 日
Note that as long as 8x+1 is no more than 2^53-1, the simple test for a perfect square will be valid. And larger than that you cannot represent x exactly anyway as a double.
Richard Crozier
Richard Crozier 2012 年 9 月 6 日
I will only need this for relatively small numbers, it's actually a test of some user input. Useful to bear in mind though, thanks.

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

採用された回答

Matt Fig
Matt Fig 2012 年 9 月 6 日
istri = @(x) floor(sqrt(8*x+1))==sqrt(8*x+1);
x = 1:20;
idx = istri(x)
x(idx)
  1 件のコメント
Richard Crozier
Richard Crozier 2012 年 9 月 6 日
I think this is the best for my purposes, thanks!

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

その他の回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2012 年 9 月 6 日
編集済み: Azzi Abdelmalek 2012 年 9 月 6 日
k=0
for n=1:100 %for example
x = n*(n+1)/2;
y=sqrt(8*x+1);
if round(y)==y
k=k+1;
result(k)=x
end
end
n=size(result) % you will obtain n=100, which verify the formula
or
n=1:100 %for example
x = n.*(n+1)/2;y=sqrt(8*x+1)
all(y==round(y)) % if the result is 1, the formula is checked

Sean de Wolski
Sean de Wolski 2012 年 9 月 6 日
  2 件のコメント
Richard Crozier
Richard Crozier 2012 年 9 月 6 日
This suggestion is fine, except that I can't actually see the solutions.
Sean de Wolski
Sean de Wolski 2012 年 9 月 6 日
Sure you can! You just have to get addicted to it and solve a bunch of other problems first!

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

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by