The Centrifuge Problem

The Centrifuge Problem

A centrifuge has n identical slots, each big enough to fit one test tube. To prevent this centrifuge from wobbling, k identical tubes must be placed into these slots so that their mutual center of gravity lies precisely at the center of the centrifuge. This problem was inspired by yet another video “The Centrifuge Problem”, which you may watch below. Alternatively, whose eyes read faster than their ears listen can check out Matt Baker’s post “The Balanced Centrifuge Problem”.

So, balancing k test tubes into n slots turns out to be possible if and only if both k, n-k can be expressed as sums of prime factors of n, repetition of factors allowed. For example, when n equals 6 whose prime factors are 2 and 3, the centrifuge can hold 0, 2, 3, 4 (= 2 + 2) or 6 (= 3 + 3) test tubes. However, there is no possible way to balance 1 or 5 test tubes in six slots. Even though 5 = 2 + 3 satisfies the first part of the rule, there is no way to counterbalance the remaining empty slot, which is required despite the counterintuitive fact that empty slots weigh nothing!

example

This function does not actually need to construct the balanced configuration of k test tubes, but merely determine whether at least one balanced configuration exists for the given n, k.

Input: Two integers (int)

Output: Logic value (bool).

Examples:

assert balanced_centrifuge(6, 3) == True
assert balanced_centrifuge(7, 0) == True
assert balanced_centrifuge(15, 8) == False

The mission was taken from Python CCPS 109. It is taught for Ryerson Chang School of Continuing Education by Ilkka Kokkarinen