Wolfram Research

Function Repository Resource:

LuckyNumbers

Source Notebook

Get a list of lucky numbers

Contributed by: Enrique Zeleny

ResourceFunction["LuckyNumbers"][n]

gives the lucky numbers until integer n.

ResourceFunction["LuckyNumbers"][n,k]

gives the lucky numbers until integer n, only iterating the sieve procedure k times.

Details and Options

Lucky numbers are defined through a sieving procedure: Start with the odd integers and strike out every third number. This gets rid of 5, 11, 17, 23 and so on. The third surviving number from the left is 7, so strike out every seventh integer not yet eliminated: 19, 39, .... The integers that survive are the lucky numbers.
Lucky numbers seem to share many properties with primes.

Examples

Basic Examples

First lucky numbers before 100:

In[1]:=
ResourceFunction["LuckyNumbers"][100]
Out[1]=

Lucky numbers that are primes are lucky primes:

In[2]:=
If[PrimeQ[#], Style[#, 18], #] & /@ ResourceFunction["LuckyNumbers"][100]
Out[2]=

The first 300 integers surviving 6 steps of the lucky sieve process:

In[3]:=
ResourceFunction["LuckyNumbers"][300, 6]
Out[3]=

Step-by-step sieve for lucky numbers:

In[4]:=
Grid[With[{r = Range[1, 60, 2]}, (ReplacePart[r, Thread[List /@ ( Complement[r, #1]/2 + 1/2) -> ""]] &) /@ Table[ResourceFunction["LuckyNumbers"][65, n], {n, 0, 5}]], Spacings -> .45]
Out[4]=
In[5]:=
luckies = ResourceFunction["LuckyNumbers"][1000];

Distance between lucky numbers:

In[6]:=
ListLinePlot[Differences[luckies]]
Out[6]=

Highlight lucky numbers in an array:

In[7]:=
Grid[Partition[
  MapAt[Style[#1, Background -> RGBColor[1, 0.47, 0]] &, Range[500], List /@ TakeWhile[luckies, # < 500 &]], 20], ItemStyle -> {10}]
Out[7]=

Comparing with prime numbers:

In[8]:=
ListPlot[{luckies, Table[Prime[k], {k, 1, Length[luckies]}]}, PlotLegends -> {"primes", "lucky numbers"}]
Out[8]=

“Twin” lucky numbers (those separated by an even number):

In[9]:=
Cases[Partition[luckies, 2, 1], {m_, n_} /; n - m == 2]
Out[9]=

Goldbach conjecture for luckies (an even number is a sum of two luckies):

In[10]:=
Table[Catch[
  Table[If[MemberQ[luckies, n - luckies[[i]]], Throw[{n - luckies[[i]], luckies[[i]]}]], {i, 2, 100}]], {n, 4, 100, 2}]
Out[10]=

Number of lucky numbers less than a million:

In[11]:=
Length[ResourceFunction["LuckyNumbers"][1000000]] // Timing
Out[11]=

Requirements

Wolfram Language 11.3 (March 2018) or above

Resource History

License Information