Best way to determine if number is triangular number?

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 日

1 投票

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 日

0 投票

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 日

0 投票

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!

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

カテゴリ

Community Treasure Hunt

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

Start Hunting!

Translated by