Если у вас есть список треугольных номеров, вы можете выполнить поиск по сечению initail для данного номера, пока не найдете число или треугольное число, большее, чем gien.
Этот алгоритм будет O (n).
Но вы можете сделать лучше с бинарным поиском. Для этого выберем нижнюю границу 0 и верхнюю границу k, где Tk> n. Затем проверьте T (k/2). Если n равно T (k/2), n треугольно. Если n больше, то установите нижнюю границу k/2 + 1, иначе установите верхнюю границу к k/2. Повторите, в то время как нижняя граница меньше или равна верхней границе.
Даже лучше, вычислить треугольный корень и проверить, если это целое число:
// check to see if x is atriangular number
let a = 8*x + 1
if a is not a square number x is not triangular
let b = sqrt(a)
let n = (b-1)/2
if n is not an integer x is not triangle
otherwise, it is the n-th triangle
[Википедия на треугольных чисел] (http://en.wikipedia.org/wiki/Triangular_number) –