  In this paper, we improve Bruschweiler's algorithm such that only one query
is needed for searching the single object z from N=2^n unsorted elements. Our
algorithm construct the new oracle query function g(.) satisfying g(x)=0 for
all input x, except for one, say x=z, where g(z)=z. To store z, our algorithm
extends from one ancillary qubit to n ancillary qubits. We then measure these
ancillary qubits to discover z. We further use our ensemble search algorithm to
attack classical public key cryptosystems. Given the ciphertext C=Ek(m, r)
which is generated by the encryption function Ek(), a public key k, a message
m, and a random number r, we can construct an oracle query function h(.)
satisfying h(m', r')=0 if Ek(m', r')!=C and h(m', r')= (m', r') if Ek(m',
r')=C. There is only one object, say (m, r), can be discovered in decryption of
C. By preparing the input with all possible states of (m', r'), we can thus use
our ensemble search algorithm to find the wanted object (m, r). Obviously, we
break the classical public key cryptosystems under the ciphertext attack by
performing the oracle query function only one time.
