# Output Distinct Factor Cuboids

## JavaScript (V8), ~~ 61 ~~ 60 bytes

Prints the cuboids to STDOUT.

```
n=>{for(z=n;y=z;z--)for(;(x=n/y/z)<=y;y--)x%1||print(x,y,z)}
```

Try it online!

### Commented

```
n => { // n = input
for( // outer loop:
z = n; // start with z = n
y = z; // set y to z; stop if we've reached 0
z-- // decrement z after each iteration
) //
for( // inner loop:
; // no initialization code
(x = n / y / z) // set x to n / y / z
<= y; // stop if x > y
y-- // decrement y after each iteration
) //
x % 1 || // unless x is not an integer,
print(x, y, z) // print the cuboid (x, y, z)
} //
```

## Haskell, 52 bytes

```
f n=[[a,b,c]|a<-[1..n],b<-[1..a],c<-[1..b],a*b*c==n]
```

Try it online!

Tuples are in descending order. "3" seems to be a small-enough number that writing out the 3 loops was shorter than anything general I could come up with.

## Python 3.8 (pre-release), ~~ 83 ~~ 80 bytes

```
lambda n:[[i,j,k]for i in(r:=range(n+1))for j in r[i:]for k in r[j:]if i*j*k==n]
```

**Try it online!**

...beating a two-loop version by three bytes:

```
lambda n:[[i,j,n//i//j]for i in(r:=range(1,n+1))for j in r if(i<=j<=n/i/j)>n%(i*j)]
```