Forbidden numbers: Difference between revisions

From Rosetta Code
Content added Content deleted
(New draft task and Raku entry)
 
m (grammar)
Line 11: Line 11:
Finally, some, (the focus of this task) require the sum at least four squares. <code>'''7 == 2<sup>2</sup> + 1<sup>2</sup> + 1<sup>2</sup> + 1<sup>2</sup>'''</code>. There is no way to reach 7 other than summing four squares.
Finally, some, (the focus of this task) require the sum at least four squares. <code>'''7 == 2<sup>2</sup> + 1<sup>2</sup> + 1<sup>2</sup> + 1<sup>2</sup>'''</code>. There is no way to reach 7 other than summing four squares.


These numbers that show up in crystallography; x-ray diffraction patterns of cubic crystals depend on a length squared plus a width squared plus a height squared. Some configurations that require at least four squares are impossible to index and are colloquially known as '''forbidden numbers'''.
These numbers show up in crystallography; x-ray diffraction patterns of cubic crystals depend on a length squared plus a width squared plus a height squared. Some configurations that require at least four squares are impossible to index and are colloquially known as '''forbidden numbers'''.





Revision as of 22:45, 27 April 2023

Forbidden numbers is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.

Lagrange's theorem tells us that every positive integer can be written as a sum of at most four squares.

Many, (square numbers) can be written as a "sum" of a single square. E.G.: 4 == 22.

Some numbers require at least two squares to be summed. 5 == 22 + 12

Others require at least three squares. 6 == 22 + 12 + 12

Finally, some, (the focus of this task) require the sum at least four squares. 7 == 22 + 12 + 12 + 12. There is no way to reach 7 other than summing four squares.

These numbers show up in crystallography; x-ray diffraction patterns of cubic crystals depend on a length squared plus a width squared plus a height squared. Some configurations that require at least four squares are impossible to index and are colloquially known as forbidden numbers.


Note that some numbers can be made from the sum of four squares: 16 == 22 + 22 + 22 + 22, but since it can also be formed from less than four, 16 == 42, it does not count as a forbidden number.


Task
  • Find and show the first fifty forbidden numbers.
  • Find and show the count of forbidden numbers up to 500, 5,000.


Stretch
  • Find and show the count of forbidden numbers up to 50,000, 500,000.


See also


Raku

use Lingua::EN::Numbers;
use List::Divvy;

my @f = (1..*).map:8-1;

my @forbidden = lazy flat @f[0], gather for ^∞ {
    state ($p0, $p1) = 1, 0;
    take (@f[$p0] < @forbidden[$p14) ?? @f[$p0++] !! @forbidden[$p1++]×4;
}

put "First fifty forbidden numbers: \n" ~
  @forbidden[^50].batch(10)».fmt("%3d").join: "\n";

put "\nForbidden number count up to {.Int.&cardinal}: " ~
  comma +@forbidden.&upto: $_ for 5e2, 5e3, 5e4, 5e5, 5e6;
Output:
First fifty forbidden numbers: 
  7  15  23  28  31  39  47  55  60  63
 71  79  87  92  95 103 111 112 119 124
127 135 143 151 156 159 167 175 183 188
191 199 207 215 220 223 231 239 240 247
252 255 263 271 279 284 287 295 303 311

Forbidden number count up to five hundred: 82

Forbidden number count up to five thousand: 831

Forbidden number count up to fifty thousand: 8,330

Forbidden number count up to five hundred thousand: 83,331

Forbidden number count up to five million: 833,329