You are given the health of the king as an integer 'N'. You need to find the minimum number of stabs to kill the king. The king dies if the health becomes 0.
At any point, to decrease the health of the king you can apply either of two operations (types of stab):
1. The first kind of stab decreases the kingβs health 'H' by 1 i.e 'H' = 'H'-1.
2. The second kind of stab decreases the kingβs health to 'H1', where 'H'= 'H1'*'H2' and 'H1' >= 'H2' > 1 i.e if 'H' = 'H1'*'H2', then 'H' can decrease to 'H1' where 'H1' is the larger factor.
Note :
1. The kingβs initial health is an integer and always positive.
2. After each step, the kingβs health is decreased. It can not remain the same after a stab of either type.
The first line of the input contains an integer 'T', denoting the number of test cases.
The first line and the only line of each test case contains an integer 'N', denoting the initial health of the king.
Output Format :
The only line of output of each test case should contain a value denoting the minimum number of stabs required to kill the king.
Note :
You don't need to print anything, it has already been taken care of. Just implement the given function.
1 <= T <= 10^2
1 <= N <= 10^3
Time Limit : 1sec
1
8
4
We know that, 8 = 4*2. So, we can reduce kings health from 8 to 4 after one stab of type 2.
Now since, 4 = 2*2, so after the second stab of type 2, kingβs health reduces from 4 to 2.
The current health of king = 2. After the third stab of type 1, the kingβs health reduces from 2 to 1.
Finally, after the fourth stab of type 1, the kingβs health reduces from 1 to 0.
So, in total it takes 4 steps at minimum to kill the king.
1
3
3
Try to generate all possible ways.
Letβs try to do this problem using recursion, as the problem follows optimal substructure property. That is from any particular value say βXβ, there are limited possible transitions that you could make.
O(2 ^ sqrt(N)), where βNβ is the initial health of the king.
We call recursive function βNβ times for calculating the stabs for each subproblems generating all possible ways which can be up to 2 ^ 'N' and in which we run a loop over multiples of health in each call which can be maximum up to O(sqrt(N)). Hence, the overall time complexity will be O(2 ^ sqrt(N)).
O(N), where βNβ is the initial health of the king.
Recursive stack is called βNβ for calculating stab for health 1 to βNβ. Hence, the overall space complexity will be O(N).