%I #34 Mar 12 2024 08:48:38
%S 0,0,0,2,7,17,39,88,192,408,855,1775,3655,7478,15228,30898,62511,
%T 126177,254223,511472,1027840,2063600,4140015,8300767,16635087,
%U 33324462,66736764,133615658,267461287,535294673,1071191415,2143357000,4288290240,8579130888
%N Number of subsets of {1,...,n} containing two elements whose difference is 2.
%C Also, the number of bitstrings of length n containing either 101 or 111.
%H David Nacin, <a href="/A209398/b209398.txt">Table of n, a(n) for n = 0..500</a>
%H <a href="/index/Rec#order_05">Index entries for linear recurrences with constant coefficients</a>, signature (3,-2,1,-1,-2).
%F a(n) = 3*a(n-1) - 2*a(n-2) + a(n-3) - a(n-4) - 2*a(n-5), a(0)=0, a(1)=0, a(2)=0, a(3)=2, a(4)=7.
%F a(n) = 2^n - F(2+floor(n/2))*F(floor(2+(n+1)/2)), where F(n) are the Fibonacci numbers.
%F a(n) = 2^n - A006498(n+2).
%F G.f.: (2*x^3 + 1*x^4)/(1 - 3*x + 2*x^2 - x^3 + x^4 + 2*x^5) = x^3*(2 + x) / ((1 - 2*x)*(1 + x^2)*(1 - x - x^2)).
%F E.g.f.: (2*cos(x) + 5*cosh(2*x) + sin(x) + 5*sinh(2*x) - exp(x/2)*(7*cosh(sqrt(5)*x/2) + 3*sqrt(5)*sinh(sqrt(5)*x/2)))/5. - _Stefano Spezia_, Mar 12 2024
%e For n=3 the subsets containing 1 and 3 are {1,3} and {1,2,3} so a(3)=2.
%t Table[2^n -Fibonacci[Floor[n/2] + 2]*Fibonacci[Floor[(n + 1)/2] + 2], {n, 0,30}]
%t LinearRecurrence[{3, -2, 1, -1, -2}, {0, 0, 0, 2, 7}, 40]
%t CoefficientList[ Series[x^3 (x +2)/(2x^5 +x^4 -x^3 +2x^2 -3x +1), {x, 0, 33}], x] (* _Robert G. Wilson v_, Jan 03 2018 *)
%t a[n_] := Floor[ N[(2^-n ((50 - 14 Sqrt[5]) (1 - Sqrt[5])^n + ((-1 + 2I) (-2I)^n - (1 + 2I) (2I)^n + 5 4^n) (15 + 11 Sqrt[5]) - 2 (1 + Sqrt[5])^n (85 + 37 Sqrt[5])))/(150 + 110 Sqrt[5])]]; Array[a, 33] (* _Robert G. Wilson v_, Jan 03 2018 *)
%o (Python)
%o #Through Recurrence
%o def a(n, adict={0:0, 1:0, 2:0, 3:2, 4:7}):
%o .if n in adict:
%o ..return adict[n]
%o .adict[n]=3*a(n-1)-2*a(n-2)+a(n-3)-a(n-4)-2*a(n-5)
%o .return adict[n]
%o (Python)
%o #Returns the actual list of valid subsets
%o def contains101(n):
%o .patterns=list()
%o .for start in range (1,n-1):
%o ..s=set()
%o ..for i in range(3):
%o ...if (1,0,1)[i]:
%o ....s.add(start+i)
%o ..patterns.append(s)
%o .s=list()
%o .for i in range(2,n+1):
%o ..for temptuple in comb(range(1,n+1),i):
%o ...tempset=set(temptuple)
%o ...for sub in patterns:
%o ....if sub <= tempset:
%o .....s.append(tempset)
%o .....break
%o .return s
%o #Counts all such subsets using the preceding function
%o def countcontains101(n):
%o .return len(contains101(n))
%o (PARI) x='x+O('x^30); concat([0,0,0], Vec(x^3*(2+x)/((1-2*x)*(1+x^2)*(1-x-x^2)))) \\ _G. C. Greubel_, Jan 03 2018
%o (Magma) [2^n - Fibonacci(Floor(n/2) + 2)*Fibonacci(Floor((n + 1)/2) + 2): n in [0..30]]; // _G. C. Greubel_, Jan 03 2018
%Y Cf. A006498, A209399, A209400.
%K nonn,easy
%O 0,4
%A _David Nacin_, Mar 07 2012