It's possible to solve this relatively efficiently by computing all pairwise gcd's, removing duplicates, and then recursing. It's the act of removing duplicates before you recurse that makes it efficient.
I'll explain the algorithm in more detail below, but first, it helps to define a binary operator $\otimes$. If $S,T$ are sets of positive integers, define
$$S \otimes T = \{\gcd(s,t) : s \in S, t \in T\}.$$
Note that $|S \otimes T| \le |S| \times |T|$ and $|S \otimes T| \le 10^9$ (in your problem); typically, $S \otimes T$ will be even smaller than either of those bounds suggest, which helps make the algorithm efficient. Also note that we can compute $S \otimes T$ with $|S| \times |T|$ gcd operations by simple enumeration.
With that notation, here is the algorithm. Let $S_1$ be the input set of numbers. Compute $S_2 = S_1 \otimes S_1$, then $S_3 = S_1 \otimes S_2$, then $S_4 = S_1 \otimes S_3$, and so on. Find the smallest $k$ such that $1 \in S_k$ but $1 \notin S_{k-1}$. Then you know that the size of the smallest such subset is $k$. If you also want to output a concrete example of such a subset, by keeping back-pointers you can easily reconstruct such a set.
This will be relatively efficient, as none of the intermediate sets grows in size above $10^9$ (in fact, their size will probably be much smaller than that), and the running time requires about $500 \times (|S_1| + |S_2| + \cdots)$ gcd operations.
Here is an optimization that might improve efficiency even further. Basically, you can use iterated doubling to find the smallest $k$ such that $1 \in S_k$. In particular, for each element $x \in S_i$, we keep track of the smallest subset of $S_1$ whose gcd is $x$ and whose size is $\le i$. (When you remove duplicates, you resolve ties in favor of the subset that is smaller.) Now, rather than computing the sequence of nine sets $S_1,S_2,S_3,S_4,\dots,S_9$, we instead compute the sequence of five sets $S_1,S_2,S_4,S_8,S_9$, by computing $S_2 = S_1 \otimes S_1$, then $S_4 = S_2 \otimes S_2$, then $S_8 = S_4 \otimes S_4$, then $S_9 = S_1 \times S_8$. As you go, find the first $k \in [1,2,4,8,9]$ such that $1 \in S_k$. Once you've found $k$ such that $1 \in S_k$, you can immediately stop: you can find the smallest subset whose gcd is $1$ by looking at the subset associated with $1$. So, you can stop as soon as you reach a set $S_k$ such that $1 \in S_k$, which allows you to stop early if you find a smaller subset.
This should be time-efficient and space-efficient. To save space, for each element $x \in S_k$, you don't need to store the entire set: it's enough to store two backpointers (so the two elements of $S_i,S_j$ that you took the gcd of, to get $x$) and optionally the size of the corresponding subset.
In principle, you can replace the sequence $[1,2,4,8,9]$ by any other addition chain. I don't know whether some other addition chain will be any better. The optimal choice might depend upon the distribution of correct answers and the expected sizes of the sets $S_k$, which is not clear to me, but can probably be derived empirically through experimentation.
Credits: My thanks to KWillets for the idea of storing a subset of numbers along with each element of $S_i$, which allows stopping early.