(1)设等差数列 $\{a_n\}$ 的公差为 $d$。
由 $a_1 = 3, a_4 = 12$,得:
$$a_4 = a_1 + 3d \implies 3 + 3d = 12$$
解得 $d = 3$。
故 $\{a_n\}$ 的通项公式为:
$$a_n = 3 + (n-1) \times 3 = 3n$$
设数列 $\{b_n - a_n\}$ 的公比为 $q$。
令 $c_n = b_n - a_n$,则 $\{c_n\}$ 为等比数列。
计算首项和第4项:
$$c_1 = b_1 - a_1 = 4 - 3 = 1$$
$$c_4 = b_4 - a_4 = 20 - 12 = 8$$
由等比数列性质 $c_4 = c_1 \cdot q^3$,得:
$$1 \cdot q^3 = 8 \implies q = 2$$
所以:
$$c_n = c_1 \cdot q^{n-1} = 1 \cdot 2^{n-1} = 2^{n-1}$$
即 $b_n - a_n = 2^{n-1}$,从而:
$$b_n = a_n + 2^{n-1} = 3n + 2^{n-1}$$
(2)设数列 $\{b_n\}$ 的前 $n$ 项和为 $S_n$。
$$S_n = \sum_{k=1}^n b_k = \sum_{k=1}^n (3k + 2^{k-1})$$
利用分组求和法,将其分为等差数列部分和等比数列部分:
$$S_n = \sum_{k=1}^n 3k + \sum_{k=1}^n 2^{k-1}$$
第一部分为等差数列求和:
$$\sum_{k=1}^n 3k = 3 \times \frac{n(n+1)}{2} = \frac{3n(n+1)}{2}$$
第二部分为首项为 $1$、公比为 $2$ 的等比数列求和:
$$\sum_{k=1}^n 2^{k-1} = \frac{1 \cdot (1 - 2^n)}{1 - 2} = \frac{1 - 2^n}{-1} = 2^n - 1$$
综上,数列 $\{b_n\}$ 的前 $n$ 项和为:
$$S_n = \frac{3n(n+1)}{2} + 2^n - 1$$