|
|
A036241
|
|
a(1)=1, a(2)=2, a(3)=3; for n >= 3, a(n) is smallest number such that all a(i) for 1 <= i <= n are distinct, all a(i)+a(j) for 1 <= i < j <= n are distinct and all a(i)+a(j)+a(k) for 1 <= i < j < k <= n are distinct.
|
|
6
|
|
|
1, 2, 3, 5, 8, 14, 25, 45, 82, 140, 235, 388, 559, 839, 1286, 1582, 2221, 3144, 4071, 5795, 6872, 9204, 11524, 13796, 17686, 21489, 26019, 31080, 37742, 45067, 53144, 58365, 67917, 78484, 91767, 106513, 118600, 133486, 147633, 166034, 174717
(list;
graph;
refs;
listen;
history;
text;
internal format)
|
|
|
OFFSET
|
1,2
|
|
REFERENCES
|
Letter from V. Jooste, Pretoria, South Africa, Sep. 8, 1975.
|
|
LINKS
|
|
|
EXAMPLE
|
For {1,2,3,4} we have 1+4 = 2+3, so a(4) is not 4. For {1,2,3,5} the terms 1, 2, 3, 5 are distinct, the sums 1+2, 1+3, 1+5, 2+3, 2+5, 3+5 are distinct and the sums 1+2+3, 1+2+5, 1+3+5, 2+3+5 are distinct, so a(4) = 5.
|
|
MATHEMATICA
|
a[1]=1; a[2]=2; a[3]=3; a[n_] := a[n] = Catch[For[an = a[n-1] + 1, True, an++, a[n] = an; t2 = Flatten[Table[a[i] + a[j], {i, 1, n}, {j, i+1, n}]]; If[n*(n-1)/2 == Length[Union[t2]], t3 = Flatten[Table[a[i] + a[j] + a[k], {i, 1, n}, {j, i+1, n}, {k, j+1, n}]]; If[ n*(n-1)*(n-2)/6 == Length[Union[t3]], Throw[an]]]]]; Table[Print[a[n]]; a[n], {n, 1, 41}] (* Jean-François Alcover, Jul 24 2012 *)
|
|
PROG
|
(PARI) {unique(v)=local(b); b=1; for(j=2, length(v), if(v[j-1]==v[j], b=0)); b}
{newsort(u, v, q)=local(s); s=[]; for(i=1, length(v), s=concat(s, v[i]+q)); vecsort(concat(u, s))}
{m=175000; print1(1, ", ", 2, ", ", 3, ", "); w1=[1, 2, 3]; w2=[3, 4, 5]; w3=[6]; q=4; while(q<m, y1=concat(w1, q); y2=newsort(w2, w1, q); y3=newsort(w3, w2, q); if(unique(y1)&&unique(y2)&&unique(y3), w1=y1; w2=y2; w3=y3; print1(q, ", ")); q=q+1)}
(Haskell)
import qualified Data.Set as Set (null, map)
import Data.Set (empty, fromList, toList, intersect, union)
a036241 n = a036241_list !! (n-1)
a036241_list = f [1..] [] empty empty where
f (x:xs) ys s2 s3
| null (s2' `intersect` y2s) && null (s3' `intersect` y3s)
= x : f xs (x:ys) (fromList s2' `union` s2) (fromList s3' `union` s3)
| otherwise = f xs ys s2 s3
where s2' = sort $ map (x +) ys
s3' = sort $ map (x +) y2s
y2s = toList s2
y3s = toList s3
(Python)
from itertools import count, islice
def A036241_gen(): # generator of terms
aset2, aset3 = {3, 4, 5}, {6}
yield from (alist:=[1, 2, 3])
for k in count(4):
bset2, bset3 = set(), set()
for a in alist:
if (b2:=a+k) in aset2:
break
bset2.add(b2)
else:
for a2 in aset2:
if (b3:=a2+k) in aset3:
break
bset3.add(b3)
else:
yield k
alist.append(k)
aset2.update(bset2)
aset3.update(bset3)
|
|
CROSSREFS
|
|
|
KEYWORD
|
nonn,nice
|
|
AUTHOR
|
|
|
EXTENSIONS
|
|
|
STATUS
|
approved
|
|
|
|