Witam
mam do rozwiązania zadanie
Triangular number jest liczbą punktów, która może wypełnić trójkąt równoboczny. Np liczba 6 jest taką liczbą bo trójkat zbudowany z takiej liczby punktów jest równoboczny. Ogólnie problem sprowadza się do rozwiązania równania T(n) = n * (n + 1) / 2, gdzie T(n) jest daną szukaną zaś jest n. Poniżej moje rozwiązanie:
#include <stdbool.h>
bool is_triangular(int t) {
unsigned long long int delta = 1+8*t;
double x1=(-1-sqrt(delta))/2.0;
if(x1>0&&floor(x1)==x1)
return true;
double x2=(-1+sqrt(delta))/2.0;
if(x2>0&&floor(x2)==x2)
return true;
return false;
}
Program przechodzi wszystkie test a wykrzacza mi się na t == 458000245 i t == 1979494660
Nie wiem gdzie jest bład
delta
jest wyliczana z równaniaf(x) = x^2 + x - 2t
, które posiada takie same pierwiastki jak równanief(x) = 1/2 * x^2 +1/2 * x - t
. I chodźdelta
będzie się w tym przypadku różniła, to dla każdegot
będącego liczbą trójkątną, pierwiastek zdelty
musi być liczbą całkowitą.Shalomf(x) = x^2 + x - 2t
a nie kombinować ;)