Factoring Groups Efficiently

We give a polynomial time algorithm that computes a decomposition of a finite group G given in the form of its multiplication table. That is, given G , the algorithm outputs two subgroups A and B of G such that G is the direct product of A and B , if such a decomposition exists.