I would like to generate an output list satisfying a condition, for example an equation but faster than the following code:

```
t = 4; p = 20;
union[Flatten[Table[If[t<=(4a b d-1)c/(a+b)<=t+1,{(4a b d-1)c/(a+b)},0], {a, 1, p}, {b, 1, a}, {d, 1, p}, {c, 1, p (a + b) / (4a b d-1)}], 4]]
```

which gives

```
{0, 9/2, 23/5, 14/3, 5}
```

Also I do not need $ 0 in the exit.

Thank you.