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.
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
Offset: 1
Examples
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.
References
- Letter from V. Jooste, Pretoria, South Africa, Sep. 8, 1975.
Links
- Chai Wah Wu, Table of n, a(n) for n = 1..237 (n = 1..75 from Reinhard Zumkeller)
Programs
-
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 -- Reinhard Zumkeller, Oct 02 2011
-
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 *)
-
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
-
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) A036241_list = list(islice(A036241_gen(),20)) # Chai Wah Wu, Sep 10 2023
Extensions
Better description and more terms from Naohiro Nomoto, Jul 02 2001
Edited by and terms a(30) to a(41) from Klaus Brockhaus, May 21 2003