Diﬃculty level: moderate
Every student, who has learned programming, must have written a program to determine whether a given positive integer is a prime number. Basically in order to determine whether a positive integer n is prime, we search for any number in the range [2, n − 1] which can divide n. Some of you would have designed a slighly better implementation where you search √ for any divisor of n from the range [2, n ]. Does either of these two implementations correspond to an eﬃcient algorithm ? Ponder over this question deeply. Let us try to design an eﬃcient algorithm for a problem which looks as simple and innocent as the problem discussed above. First, we give a deﬁnition. Deﬁnition 1. A positive integer is said to be bit-sum prime if the sum of the bits in its binary representation is a prime number. For example 6(110), 14(1110) are bit-sum prime numbers, whereas 29(11101) is not a bit-sum prime number. Design and implement an algorithm which receives a 64-bit integer n and outputs the count of all the bit-sum prime numbers less than n. Test it for a really large number, for example, execute your algorithm for 123456789123456789. Hint: Your algorithm/program is NOT supposed to enumerate all the bit-sum prime numbers. Instead, it has to just report the count of all the bit-sum prime number. Hence the output will be just a single number. Notice that you will have to use clever programming skills also in this problem.
every art is beautiful and so is the art of algorithm design ...
Please join StudyMode to read the full document