Reshaping an object into two integer sided cuboids without changing the total volume.

167 Views Asked by At

I was investigating this problem: Given an object with a fixed integer volume, we want to break it up and reshape it into two cuboids with integer sides such that the total volume of these two cuboids is equal to that of the original object. Here, the sides of a cuboid refers to its length, breadth and height. I observed except for $11$ exceptions, this can always be done which I state as conjectures. Are these conjectures true?

Strong conjecture: Every integer except $11, 14, 15,23, 38, 47, 55, 71, 103, 113$ and $311$ can be written as the sum of the volumes of two integer sided cuboids such that the sides of each cuboid forms a triangle.

Weak conjecture: If the volume of an integer sided cuboid is $\ge 8$ then the cuboid can be reshaped into two cuboids such that the sides of each cuboid are integers which form a triangle.

Example: A cuboid with sides $(3,4,5)$ has a volume $60$ and these three side can form a triangle. So the conjecture says that the volume $60$ can be written as the sum of volume of two cuboids with integer side such that the three side of each cuboid form a triangle. We find that $60 = 12 + 48$ i.e.

$$ 3.4.5 = 2.2.3 + 3.4.4 $$

Update 7-Mar-2020: Conjecture is true for $n \le 10^6$.

Sagemath Code:

def is_triangular(a):
    f = 0
    d1 = 1
    stop1 = floor(a^0.5)
    while(d1 <= stop1):
        if(a%d1 == 0):
            b = a/d1
            d2 = d1
            stop2 = floor((a/d1)^0.5)
            while(d2 <= stop2):
                if(b%d2 == 0):
                    c = b/d2
                    if(d1 + d2 > c):  
                        if(d1 + c > d2):
                            f = 1
                            stop1 = stop2 = 0
                d2 = d2 + 1
        d1 = d1 + 1
    return(f)

f = 3
a = 9
check = 1

while check == 1:
    if is_triangular(a) == 1:
        found = 0
        b = 1
        f = f + 1
        while True:
            if is_triangular(b) == 1 and is_triangular(a-b) == 1:
                # print f, a,b, a-b
                found = 1
                break
            b = b + 1
        if found == 0:
            print "Conunter example", a
            check == 0
        else:
            if a%10^4 == 0:
                print "Checked till", a, f
    a = a + 1

Related question: How many numbers $\le x$ can be factorized into three numbers which form the sides of a triangle?