figurate_numbers 1.3.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2232 +1,14 @@
1
- # Generates infinite sequences of plane, space, and multidimensional figurate numbers based on the book ‘Figurate Numbers’ (2012) by Elena Deza and Michel Deza. The methods are implemented using the Enumerator class and are designed for use in Sonic Pi.
1
+ require_relative 'figurate_numbers/version'
2
+ require_relative 'figurate_numbers/plane_figurate_numbers'
3
+ require_relative 'figurate_numbers/space_figurate_numbers'
4
+ require_relative 'figurate_numbers/multidimensional_figurate_numbers'
2
5
 
3
6
  module FigurateNumbers
4
- extend self
5
-
6
- def polygonal_numbers(m)
7
- Enumerator.new do |y|
8
- (1..Float::INFINITY).each do |delta|
9
- y << ((m - 2) * delta**2 - (m - 4) * delta) / 2
10
- end
11
- end
12
- end
13
-
14
- def triangular_numbers
15
- Enumerator.new do |y|
16
- (1..Float::INFINITY).each do |delta|
17
- y << (delta**2 + delta) / 2
18
- end
19
- end
20
- end
21
-
22
- def square_numbers
23
- Enumerator.new do |y|
24
- (1..Float::INFINITY).each do |delta|
25
- y << (2 * delta**2) / 2
26
- end
27
- end
28
- end
29
-
30
- def pentagonal_numbers
31
- Enumerator.new do |y|
32
- (1..Float::INFINITY).each do |delta|
33
- y << (3 * delta**2 - delta) / 2
34
- end
35
- end
36
- end
37
-
38
- def hexagonal_numbers
39
- Enumerator.new do |y|
40
- (1..Float::INFINITY).each do |delta|
41
- y << (4 * delta**2 - 2 * delta) / 2
42
- end
43
- end
44
- end
45
-
46
- def heptagonal_numbers
47
- Enumerator.new do |y|
48
- (1..Float::INFINITY).each do |delta|
49
- y << (5 * delta**2 - 3 * delta) / 2
50
- end
51
- end
52
- end
53
-
54
- def octagonal_numbers
55
- Enumerator.new do |y|
56
- (1..Float::INFINITY).each do |delta|
57
- y << (6 * delta**2 - 4 * delta) / 2
58
- end
59
- end
60
- end
61
-
62
- def nonagonal_numbers
63
- Enumerator.new do |y|
64
- (1..Float::INFINITY).each do |delta|
65
- y << (7 * delta**2 - 5 * delta) / 2
66
- end
67
- end
68
- end
69
-
70
- def decagonal_numbers
71
- Enumerator.new do |y|
72
- (1..Float::INFINITY).each do |delta|
73
- y << (8 * delta**2 - 6 * delta) / 2
74
- end
75
- end
76
- end
77
-
78
- def hendecagonal_numbers
79
- Enumerator.new do |y|
80
- (1..Float::INFINITY).each do |delta|
81
- y << (9 * delta**2 - 7 * delta) / 2
82
- end
83
- end
84
- end
85
-
86
- def dodecagonal_numbers
87
- Enumerator.new do |y|
88
- (1..Float::INFINITY).each do |delta|
89
- y << (10 * delta**2 - 8 * delta) / 2
90
- end
91
- end
92
- end
93
-
94
- def tridecagonal_numbers
95
- Enumerator.new do |y|
96
- (1..Float::INFINITY).each do |delta|
97
- y << (11 * delta**2 - 9 * delta) / 2
98
- end
99
- end
100
- end
101
-
102
- def tetradecagonal_numbers
103
- Enumerator.new do |y|
104
- (1..Float::INFINITY).each do |delta|
105
- y << (12 * delta**2 - 10 * delta) / 2
106
- end
107
- end
108
- end
109
-
110
- def pentadecagonal_numbers
111
- Enumerator.new do |y|
112
- (1..Float::INFINITY).each do |delta|
113
- y << (13 * delta**2 - 11 * delta) / 2
114
- end
115
- end
116
- end
117
-
118
- def hexadecagonal_numbers
119
- Enumerator.new do |y|
120
- (1..Float::INFINITY).each do |delta|
121
- y << (14 * delta**2 - 12 * delta) / 2
122
- end
123
- end
124
- end
125
-
126
- def heptadecagonal_numbers
127
- Enumerator.new do |y|
128
- (1..Float::INFINITY).each do |delta|
129
- y << (15 * delta**2 - 13 * delta) / 2
130
- end
131
- end
132
- end
133
-
134
- def octadecagonal_numbers
135
- Enumerator.new do |y|
136
- (1..Float::INFINITY).each do |delta|
137
- y << (16 * delta**2 - 14 * delta) / 2
138
- end
139
- end
140
- end
141
-
142
- def nonadecagonal_numbers
143
- Enumerator.new do |y|
144
- (1..Float::INFINITY).each do |delta|
145
- y << (17 * delta**2 - 15 * delta) / 2
146
- end
147
- end
148
- end
149
-
150
- def icosagonal_numbers
151
- Enumerator.new do |y|
152
- (1..Float::INFINITY).each do |delta|
153
- y << (18 * delta**2 - 16 * delta) / 2
154
- end
155
- end
156
- end
157
-
158
- def icosihenagonal_numbers
159
- Enumerator.new do |y|
160
- (1..Float::INFINITY).each do |delta|
161
- y << (19 * delta**2 - 17 * delta) / 2
162
- end
163
- end
164
- end
165
-
166
- def icosidigonal_numbers
167
- Enumerator.new do |y|
168
- (1..Float::INFINITY).each do |delta|
169
- y << (20 * delta**2 - 18 * delta) / 2
170
- end
171
- end
172
- end
173
-
174
- def icositrigonal_numbers
175
- Enumerator.new do |y|
176
- (1..Float::INFINITY).each do |delta|
177
- y << (21 * delta**2 - 19 * delta) / 2
178
- end
179
- end
180
- end
181
-
182
- def icositetragonal_numbers
183
- Enumerator.new do |y|
184
- (1..Float::INFINITY).each do |delta|
185
- y << (22 * delta**2 - 20 * delta) / 2
186
- end
187
- end
188
- end
189
-
190
- def icosipentagonal_numbers
191
- Enumerator.new do |y|
192
- (1..Float::INFINITY).each do |delta|
193
- y << (23 * delta**2 - 21 * delta) / 2
194
- end
195
- end
196
- end
197
-
198
- def icosihexagonal_numbers
199
- Enumerator.new do |y|
200
- (1..Float::INFINITY).each do |delta|
201
- y << (24 * delta**2 - 22 * delta) / 2
202
- end
203
- end
204
- end
205
-
206
- def icosiheptagonal_numbers
207
- Enumerator.new do |y|
208
- (1..Float::INFINITY).each do |delta|
209
- y << (25 * delta**2 - 23 * delta) / 2
210
- end
211
- end
212
- end
213
-
214
- def icosioctagonal_numbers
215
- Enumerator.new do |y|
216
- (1..Float::INFINITY).each do |delta|
217
- y << (26 * delta**2 - 24 * delta) / 2
218
- end
219
- end
220
- end
221
-
222
- def icosinonagonal_numbers
223
- Enumerator.new do |y|
224
- (1..Float::INFINITY).each do |delta|
225
- y << (27 * delta**2 - 25 * delta) / 2
226
- end
227
- end
228
- end
229
-
230
- def triacontagonal_numbers
231
- Enumerator.new do |y|
232
- (1..Float::INFINITY).each do |delta|
233
- y << (28 * delta**2 - 26 * delta) / 2
234
- end
235
- end
236
- end
237
-
238
- def centered_triangular_numbers
239
- Enumerator.new do |y|
240
- (1..Float::INFINITY).each do |delta|
241
- y << (3 * delta**2 - 3 * delta + 2) / 2
242
- end
243
- end
244
- end
245
-
246
- def centered_square_numbers
247
- Enumerator.new do |y|
248
- (1..Float::INFINITY).each do |delta|
249
- y << 2 * delta**2 - 2 * delta + 1
250
- end
251
- end
252
- end
253
-
254
- alias_method :diamond_numbers, :centered_square_numbers
255
-
256
- def centered_pentagonal_numbers
257
- Enumerator.new do |y|
258
- (1..Float::INFINITY).each do |delta|
259
- y << (5 * delta**2 - 5 * delta + 2) / 2
260
- end
261
- end
262
- end
263
-
264
- def centered_hexagonal_numbers
265
- Enumerator.new do |y|
266
- (1..Float::INFINITY).each do |delta|
267
- y << 3 * delta**2 - 3 * delta + 1
268
- end
269
- end
270
- end
271
-
272
- def centered_heptagonal_numbers
273
- Enumerator.new do |y|
274
- (1..Float::INFINITY).each do |delta|
275
- y << (7 * delta**2 - 7 * delta + 2) / 2
276
- end
277
- end
278
- end
279
-
280
- def centered_octagonal_numbers
281
- Enumerator.new do |y|
282
- (1..Float::INFINITY).each do |delta|
283
- y << 4 * delta**2 - 4 * delta + 1
284
- end
285
- end
286
- end
287
-
288
- def centered_nonagonal_numbers
289
- Enumerator.new do |y|
290
- (1..Float::INFINITY).each do |delta|
291
- y << (9 * delta**2 - 9 * delta + 2) / 2
292
- end
293
- end
294
- end
295
-
296
- def centered_decagonal_numbers
297
- Enumerator.new do |y|
298
- (1..Float::INFINITY).each do |delta|
299
- y << 5 * delta**2 - 5 * delta + 1
300
- end
301
- end
302
- end
303
-
304
- def centered_hendecagonal_numbers
305
- Enumerator.new do |y|
306
- (1..Float::INFINITY).each do |delta|
307
- y << (11 * delta**2 - 11 * delta + 2) / 2
308
- end
309
- end
310
- end
311
-
312
- def centered_dodecagonal_numbers
313
- Enumerator.new do |y|
314
- (1..Float::INFINITY).each do |delta|
315
- y << 6 * delta**2 - 6 * delta + 1
316
- end
317
- end
318
- end
319
-
320
- alias_method :star_numbers, :centered_dodecagonal_numbers
321
-
322
- def centered_tridecagonal_numbers
323
- Enumerator.new do |y|
324
- (1..Float::INFINITY).each do |delta|
325
- y << (13 * delta**2 - 13 * delta + 2) / 2
326
- end
327
- end
328
- end
329
-
330
- def centered_tetradecagonal_numbers
331
- Enumerator.new do |y|
332
- (1..Float::INFINITY).each do |delta|
333
- y << 7 * delta**2 - 7 * delta + 1
334
- end
335
- end
336
- end
337
-
338
- def centered_pentadecagonal_numbers
339
- Enumerator.new do |y|
340
- (1..Float::INFINITY).each do |delta|
341
- y << (15 * delta**2 - 15 * delta + 2) / 2
342
- end
343
- end
344
- end
345
-
346
- def centered_hexadecagonal_numbers
347
- Enumerator.new do |y|
348
- (1..Float::INFINITY).each do |delta|
349
- y << 8 * delta**2 - 8 * delta + 1
350
- end
351
- end
352
- end
353
-
354
- def centered_heptadecagonal_numbers
355
- Enumerator.new do |y|
356
- (1..Float::INFINITY).each do |delta|
357
- y << (17 * delta**2 - 17 * delta + 2) / 2
358
- end
359
- end
360
- end
361
-
362
- def centered_octadecagonal_numbers
363
- Enumerator.new do |y|
364
- (1..Float::INFINITY).each do |delta|
365
- y << 9 * delta**2 - 9 * delta + 1
366
- end
367
- end
368
- end
369
-
370
- def centered_nonadecagonal_numbers
371
- Enumerator.new do |y|
372
- (1..Float::INFINITY).each do |delta|
373
- y << (19 * delta**2 - 19 * delta + 2) / 2
374
- end
375
- end
376
- end
377
-
378
- def centered_icosagonal_numbers
379
- Enumerator.new do |y|
380
- (1..Float::INFINITY).each do |delta|
381
- y << 10 * delta**2 - 10 * delta + 1
382
- end
383
- end
384
- end
385
-
386
- def centered_icosihenagonal_numbers
387
- Enumerator.new do |y|
388
- (1..Float::INFINITY).each do |delta|
389
- y << (21 * delta**2 - 21 * delta + 2) / 2
390
- end
391
- end
392
- end
393
-
394
- def centered_icosidigonal_numbers
395
- Enumerator.new do |y|
396
- (1..Float::INFINITY).each do |delta|
397
- y << 11 * delta**2 - 11 * delta + 1
398
- end
399
- end
400
- end
401
-
402
- def centered_icositrigonal_numbers
403
- Enumerator.new do |y|
404
- (1..Float::INFINITY).each do |delta|
405
- y << (23 * delta**2 - 23 * delta + 2) / 2
406
- end
407
- end
408
- end
409
-
410
- def centered_icositetragonal_numbers
411
- Enumerator.new do |y|
412
- (1..Float::INFINITY).each do |delta|
413
- y << 12 * delta**2 - 12 * delta + 1
414
- end
415
- end
416
- end
417
-
418
- def centered_icosipentagonal_numbers
419
- Enumerator.new do |y|
420
- (1..Float::INFINITY).each do |delta|
421
- y << (25 * delta**2 - 25 * delta + 2) / 2
422
- end
423
- end
424
- end
425
-
426
- def centered_icosihexagonal_numbers
427
- Enumerator.new do |y|
428
- (1..Float::INFINITY).each do |delta|
429
- y << (13 * delta**2 - 13 * delta + 1)
430
- end
431
- end
432
- end
433
-
434
- def centered_icosiheptagonal_numbers
435
- Enumerator.new do |y|
436
- (1..Float::INFINITY).each do |delta|
437
- y << (27 * delta**2 - 27 * delta + 2) / 2
438
- end
439
- end
440
- end
441
-
442
- def centered_icosioctagonal_numbers
443
- Enumerator.new do |y|
444
- (1..Float::INFINITY).each do |delta|
445
- y << (14 * delta**2 - 14 * delta + 1)
446
- end
447
- end
448
- end
449
-
450
- def centered_icosinonagonal_numbers
451
- Enumerator.new do |y|
452
- (1..Float::INFINITY).each do |delta|
453
- y << (29 * delta**2 - 29 * delta + 2) / 2
454
- end
455
- end
456
- end
457
-
458
- def centered_triacontagonal_numbers
459
- Enumerator.new do |y|
460
- (1..Float::INFINITY).each do |delta|
461
- y << (15 * delta**2 - 15 * delta + 1)
462
- end
463
- end
464
- end
465
-
466
- def centered_mgonal_numbers(m)
467
- Enumerator.new do |y|
468
- (1..Float::INFINITY).each do |delta|
469
- y << (m * delta**2 - m * delta + 2) / 2
470
- end
471
- end
472
- end
473
-
474
- def pronic_numbers
475
- (1..Float::INFINITY).lazy.collect { |delta| delta * (delta + 1) }
476
- end
477
-
478
- alias_method :heteromecic_numbers, :pronic_numbers
479
- alias_method :oblong_numbers, :pronic_numbers
480
-
481
- def polite_numbers
482
- (1..Float::INFINITY).lazy.collect { |delta| delta + Math.log((delta + Math.log(delta, 2)), 2).floor }
483
- end
484
-
485
- def impolite_numbers
486
- (0..Float::INFINITY).lazy.collect { |delta| 2**delta }
487
- end
488
-
489
- def cross_numbers
490
- (1..Float::INFINITY).lazy.collect { |delta| 4 * delta - 3 }
491
- end
492
-
493
- def aztec_diamond_numbers
494
- (1..Float::INFINITY).lazy.collect { |delta| (2 * delta) * (delta + 1) }
495
- end
496
-
497
- def polygram_numbers(m)
498
- Enumerator.new do |y|
499
- (1..Float::INFINITY).each do |delta|
500
- y << m * delta**2 - m * delta + 1
501
- end
502
- end
503
- end
504
-
505
- alias_method :centered_star_polygonal_numbers, :polygram_numbers
506
-
507
- def pentagram_numbers
508
- Enumerator.new do |y|
509
- (1..Float::INFINITY).each do |delta|
510
- y << 5 * delta**2 - 5 * delta + 1
511
- end
512
- end
513
- end
514
-
515
- def gnomic_numbers
516
- (1..Float::INFINITY).lazy.collect { |delta| 2 * delta - 1 }
517
- end
518
-
519
- def truncated_triangular_numbers
520
- Enumerator.new do |y|
521
- (1..Float::INFINITY).each do |delta|
522
- y << (3 * delta**2) - (3 * delta) + 1
523
- end
524
- end
525
- end
526
-
527
- def truncated_square_numbers
528
- Enumerator.new do |y|
529
- (1..Float::INFINITY).each do |delta|
530
- y << (7 * delta**2) - (10 * delta) + 4
531
- end
532
- end
533
- end
534
-
535
- def truncated_pronic_numbers
536
- Enumerator.new do |y|
537
- (1..Float::INFINITY).each do |delta|
538
- y << (7 * delta**2) - (7 * delta) + 2
539
- end
540
- end
541
- end
542
-
543
- def truncated_centered_pol_numbers(m)
544
- Enumerator.new do |y|
545
- (1..Float::INFINITY).each do |delta|
546
- y << 1 + (m * (7 * delta**2 - 11 * delta + 4)) / 2
547
- end
548
- end
549
- end
550
-
551
- alias_method :truncated_centered_mgonal_numbers, :truncated_centered_pol_numbers
552
-
553
- def truncated_centered_triangular_numbers
554
- Enumerator.new do |y|
555
- (1..Float::INFINITY).each do |delta|
556
- y << (21 * delta**2 - 33 * delta) / 2 + 7
557
- end
558
- end
559
- end
560
-
561
- def truncated_centered_square_numbers
562
- Enumerator.new do |y|
563
- (1..Float::INFINITY).each do |delta|
564
- y << 14 * delta**2 - 22 * delta + 9
565
- end
566
- end
567
- end
568
-
569
- def truncated_centered_pentagonal_numbers
570
- Enumerator.new do |y|
571
- (1..Float::INFINITY).each do |delta|
572
- y << (35 * delta**2 - 55 * delta) / 2 + 11
573
- end
574
- end
575
- end
576
-
577
- def truncated_centered_hexagonal_numbers
578
- Enumerator.new do |y|
579
- (1..Float::INFINITY).each do |delta|
580
- y << 21 * delta**2 - 33 * delta + 13
581
- end
582
- end
583
- end
584
-
585
- alias_method :truncated_hex_numbers, :truncated_centered_hexagonal_numbers
586
-
587
- def generalized_mgonal_numbers(m, left_index = 0)
588
- Enumerator.new do |y|
589
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
590
- y << (delta * ((m - 2) * delta - m + 4)) / 2
591
- end
592
- end
593
- end
594
-
595
- def generalized_pentagonal_numbers(left_index = 0)
596
- m = 5
597
- Enumerator.new do |y|
598
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
599
- y << (delta * ((m - 2) * delta - m + 4)) / 2
600
- end
601
- end
602
- end
603
-
604
- def generalized_hexagonal_numbers(left_index = 0)
605
- m = 6
606
- Enumerator.new do |y|
607
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
608
- y << (delta * ((m - 2) * delta - m + 4)) / 2
609
- end
610
- end
611
- end
612
-
613
- def generalized_centered_pol_numbers(m, left_index = 0)
614
- Enumerator.new do |y|
615
- ((-1 * left_index)..Float::INFINITY).each do |delta|
616
- y << (m * delta**2 - m * delta + 2) / 2
617
- end
618
- end
619
- end
620
-
621
- def generalized_pronic_numbers(left_index = 0)
622
- Enumerator.new do |y|
623
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
624
- y << delta * (delta + 1)
625
- end
626
- end
627
- end
628
-
629
- def r_pyramidal_numbers(r = 3)
630
- Enumerator.new do |y|
631
- (1..Float::INFINITY).each do |delta|
632
- y << (3 * delta**2 + delta**3 * (r - 2) - delta * (r - 5)) / 6
633
- end
634
- end
635
- end
636
-
637
- def triangular_pyramidal_numbers
638
- Enumerator.new do |y|
639
- (1..Float::INFINITY).each do |delta|
640
- y << (delta * (delta + 1) * (delta + 2)) / 6
641
- end
642
- end
643
- end
644
-
645
- alias_method :tetrahedral_numbers, :triangular_pyramidal_numbers
646
-
647
- def square_pyramidal_numbers
648
- Enumerator.new do |y|
649
- (1..Float::INFINITY).each do |delta|
650
- y << (delta * (delta + 1) * (2 * delta + 1)) / 6
651
- end
652
- end
653
- end
654
-
655
- alias_method :pyramidal_numbers, :square_pyramidal_numbers
656
-
657
- def pentagonal_pyramidal_numbers
658
- Enumerator.new do |y|
659
- (1..Float::INFINITY).each do |delta|
660
- y << delta**2 * (delta + 1) / 2
661
- end
662
- end
663
- end
664
-
665
- def hexagonal_pyramidal_numbers
666
- Enumerator.new do |y|
667
- (1..Float::INFINITY).each do |delta|
668
- y << delta * (delta + 1) * (4 * delta - 1) / 6
669
- end
670
- end
671
- end
672
-
673
- def heptagonal_pyramidal_numbers
674
- Enumerator.new do |y|
675
- (1..Float::INFINITY).each do |delta|
676
- y << delta * (delta + 1) * (5 * delta - 2) / 6
677
- end
678
- end
679
- end
680
-
681
- def octagonal_pyramidal_numbers
682
- Enumerator.new do |y|
683
- (1..Float::INFINITY).each do |delta|
684
- y << delta * (delta + 1) * (6 * delta - 3) / 6
685
- end
686
- end
687
- end
688
-
689
- def nonagonal_pyramidal_numbers
690
- Enumerator.new do |y|
691
- (1..Float::INFINITY).each do |delta|
692
- y << delta * (delta + 1) * (7 * delta - 4) / 6
693
- end
694
- end
695
- end
696
-
697
- def decagonal_pyramidal_numbers
698
- Enumerator.new do |y|
699
- (1..Float::INFINITY).each do |delta|
700
- y << delta * (delta + 1) * (8 * delta - 5) / 6
701
- end
702
- end
703
- end
704
-
705
- def hendecagonal_pyramidal_numbers
706
- Enumerator.new do |y|
707
- (1..Float::INFINITY).each do |delta|
708
- y << delta * (delta + 1) * (9 * delta - 6) / 6
709
- end
710
- end
711
- end
712
-
713
- def dodecagonal_pyramidal_numbers
714
- Enumerator.new do |y|
715
- (1..Float::INFINITY).each do |delta|
716
- y << delta * (delta + 1) * (10 * delta - 7) / 6
717
- end
718
- end
719
- end
720
-
721
- def tridecagonal_pyramidal_numbers
722
- Enumerator.new do |y|
723
- (1..Float::INFINITY).each do |delta|
724
- y << delta * (delta + 1) * (11 * delta - 8) / 6
725
- end
726
- end
727
- end
728
-
729
- def tetradecagonal_pyramidal_numbers
730
- Enumerator.new do |y|
731
- (1..Float::INFINITY).each do |delta|
732
- y << delta * (delta + 1) * (12 * delta - 9) / 6
733
- end
734
- end
735
- end
736
-
737
-
738
- def pentadecagonal_pyramidal_numbers
739
- Enumerator.new do |y|
740
- (1..Float::INFINITY).each do |delta|
741
- y << delta * (delta + 1) * (13 * delta - 10) / 6
742
- end
743
- end
744
- end
745
-
746
-
747
- def hexadecagonal_pyramidal_numbers
748
- Enumerator.new do |y|
749
- (1..Float::INFINITY).each do |delta|
750
- y << delta * (delta + 1) * (14 * delta - 11) / 6
751
- end
752
- end
753
- end
754
-
755
- def heptadecagonal_pyramidal_numbers
756
- Enumerator.new do |y|
757
- (1..Float::INFINITY).each do |delta|
758
- y << delta * (delta + 1) * (15 * delta - 12) / 6
759
- end
760
- end
761
- end
762
-
763
- def octadecagonal_pyramidal_numbers
764
- Enumerator.new do |y|
765
- (1..Float::INFINITY).each do |delta|
766
- y << delta * (delta + 1) * (16 * delta - 13) / 6
767
- end
768
- end
769
- end
770
-
771
- def nonadecagonal_pyramidal_numbers
772
- Enumerator.new do |y|
773
- (1..Float::INFINITY).each do |delta|
774
- y << delta * (delta + 1) * (17 * delta - 14) / 6
775
- end
776
- end
777
- end
778
-
779
- def icosagonal_pyramidal_numbers
780
- Enumerator.new do |y|
781
- (1..Float::INFINITY).each do |delta|
782
- y << delta * (delta + 1) * (18 * delta - 15) / 6
783
- end
784
- end
785
- end
786
-
787
- def icosihenagonal_pyramidal_numbers
788
- Enumerator.new do |y|
789
- (1..Float::INFINITY).each do |delta|
790
- y << delta * (delta + 1) * (19 * delta - 16) / 6
791
- end
792
- end
793
- end
794
-
795
- def icosidigonal_pyramidal_numbers
796
- Enumerator.new do |y|
797
- (1..Float::INFINITY).each do |delta|
798
- y << delta * (delta + 1) * (20 * delta - 17) / 6
799
- end
800
- end
801
- end
802
-
803
- def icositrigonal_pyramidal_numbers
804
- Enumerator.new do |y|
805
- (1..Float::INFINITY).each do |delta|
806
- y << delta * (delta + 1) * (21 * delta - 18) / 6
807
- end
808
- end
809
- end
810
-
811
- def icositetragonal_pyramidal_numbers
812
- Enumerator.new do |y|
813
- (1..Float::INFINITY).each do |delta|
814
- y << delta * (delta + 1) * (22 * delta - 19) / 6
815
- end
816
- end
817
- end
818
-
819
- def icosipentagonal_pyramidal_numbers
820
- Enumerator.new do |y|
821
- (1..Float::INFINITY).each do |delta|
822
- y << delta * (delta + 1) * (23 * delta - 20) / 6
823
- end
824
- end
825
- end
826
-
827
- def icosihexagonal_pyramidal_numbers
828
- Enumerator.new do |y|
829
- (1..Float::INFINITY).each do |delta|
830
- y << delta * (delta + 1) * (24 * delta - 21) / 6
831
- end
832
- end
833
- end
834
-
835
- def icosiheptagonal_pyramidal_numbers
836
- Enumerator.new do |y|
837
- (1..Float::INFINITY).each do |delta|
838
- y << delta * (delta + 1) * (25 * delta - 22) / 6
839
- end
840
- end
841
- end
842
-
843
- def icosioctagonal_pyramidal_numbers
844
- Enumerator.new do |y|
845
- (1..Float::INFINITY).each do |delta|
846
- y << delta * (delta + 1) * (26 * delta - 23) / 6
847
- end
848
- end
849
- end
850
-
851
-
852
- def icosinonagonal_pyramidal_numbers
853
- Enumerator.new do |y|
854
- (1..Float::INFINITY).each do |delta|
855
- y << delta * (delta + 1) * (27 * delta - 24) / 6
856
- end
857
- end
858
- end
859
-
860
- def triacontagonal_pyramidal_numbers
861
- Enumerator.new do |y|
862
- (1..Float::INFINITY).each do |delta|
863
- y << delta * (delta + 1) * (28 * delta - 25) / 6
864
- end
865
- end
866
- end
867
-
868
- def triangular_tetrahedral_numbers
869
- Enumerator.new do |y|
870
- finite_set = [1, 10, 120, 1540, 7140]
871
- (finite_set).each do |delta|
872
- y << delta
873
- end
874
- end
875
- end
876
-
877
- def triangular_square_pyramidal_numbers
878
- Enumerator.new do |y|
879
- finite_set = [1, 55, 91, 208335]
880
- (finite_set).each do |delta|
881
- y << delta
882
- end
883
- end
884
- end
885
-
886
- def square_tetrahedral_numbers
887
- Enumerator.new do |y|
888
- finite_set = [1, 4, 19600]
889
- (finite_set).each do |delta|
890
- y << delta
891
- end
892
- end
893
- end
894
-
895
- def square_square_pyramidal_numbers
896
- Enumerator.new do |y|
897
- finite_set = [1, 4900]
898
- (finite_set).each do |delta|
899
- y << delta
900
- end
901
- end
902
- end
903
-
904
- def tetrahedral_square_pyramidal_number
905
- Enumerator.new do |y|
906
- finite_set = [1]
907
- (finite_set).each do |delta|
908
- y << delta
909
- end
910
- end
911
- end
912
-
913
- def cubic_numbers
914
- Enumerator.new do |y|
915
- (1..Float::INFINITY).each do |delta|
916
- y << delta**3
917
- end
918
- end
919
- end
920
-
921
- alias_method :perfect_cube_numbers, :cubic_numbers
922
-
923
- def tetrahedral_numbers
924
- Enumerator.new do |y|
925
- (1..Float::INFINITY).each do |delta|
926
- y << (delta * (delta + 1) * (delta + 2)) / 6
927
- end
928
- end
929
- end
930
-
931
- def octahedral_numbers
932
- Enumerator.new do |y|
933
- (1..Float::INFINITY).each do |delta|
934
- y << (delta * (2 * delta**2 + 1)) / 3
935
- end
936
- end
937
- end
938
-
939
- def dodecahedral_numbers
940
- Enumerator.new do |y|
941
- (1..Float::INFINITY).each do |delta|
942
- y << (delta * (3 * delta -1) * (3 * delta - 2)) / 2
943
- end
944
- end
945
- end
946
-
947
- def icosahedral_numbers
948
- Enumerator.new do |y|
949
- (1..Float::INFINITY).each do |delta|
950
- y << (delta * (5 * delta**2 - 5 * delta + 2)) / 2
951
- end
952
- end
953
- end
954
-
955
- def truncated_tetrahedral_numbers
956
- Enumerator.new do |y|
957
- (1..Float::INFINITY).each do |delta|
958
- y << (23 * delta**2 - 27 * delta + 10) * delta / 6
959
- end
960
- end
961
- end
962
-
963
- def truncated_cubic_numbers
964
- Enumerator.new do |y|
965
- (1..Float::INFINITY).each do |delta|
966
- y << (3 * delta - 2)**3 - ((8 * (delta - 1) * delta * (delta + 1)) / 6)
967
- end
968
- end
969
- end
970
-
971
- def truncated_octahedral_numbers
972
- Enumerator.new do |y|
973
- (1..Float::INFINITY).each do |delta|
974
- y << (16 * delta**3 - 33 * delta**2 + 24 * delta - 6)
975
- end
976
- end
977
- end
978
-
979
- def stella_octangula_numbers
980
- Enumerator.new do |y|
981
- (1..Float::INFINITY).each do |delta|
982
- y << delta * (2 * delta**2 - 1)
983
- end
984
- end
985
- end
986
-
987
- def centered_cube_numbers
988
- Enumerator.new do |y|
989
- (1..Float::INFINITY).each do |delta|
990
- y << (2 * delta - 1) * (delta**2 - delta + 1)
991
- end
992
- end
993
- end
994
-
995
- def rhombic_dodecahedral_numbers
996
- Enumerator.new do |y|
997
- (1..Float::INFINITY).each do |delta|
998
- y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 1)
999
- end
1000
- end
1001
- end
1002
-
1003
- def hauy_rhombic_dodecahedral_numbers
1004
- Enumerator.new do |y|
1005
- (1..Float::INFINITY).each do |delta|
1006
- y << (2 * delta - 1) * (8 * delta**2 - 14 * delta + 7)
1007
- end
1008
- end
1009
- end
1010
-
1011
- def centered_tetrahedron_numbers
1012
- Enumerator.new do |y|
1013
- (1..Float::INFINITY).each do |delta|
1014
- y << (2 * delta - 1) * ((delta**2 - delta + 3)) / 3
1015
- end
1016
- end
1017
- end
1018
-
1019
- alias_method :centered_tetrahedral_numbers, :centered_tetrahedron_numbers
1020
-
1021
- def centered_square_pyramid_numbers
1022
- Enumerator.new do |y|
1023
- (1..Float::INFINITY).each do |delta|
1024
- y << (2 * delta - 1) * ((delta**2 - delta + 2)) / 2
1025
- end
1026
- end
1027
- end
1028
-
1029
- alias_method :centered_pyramid_numbers, :centered_square_pyramid_numbers
1030
-
1031
- def centered_mgonal_pyramid_numbers(m)
1032
- Enumerator.new do |y|
1033
- (1..Float::INFINITY).each do |delta|
1034
- y << (m - 1) * ((delta - 1) * delta * (2 * delta - 1)) / 6 + (2 * delta - 1)
1035
- end
1036
- end
1037
- end
1038
-
1039
- def centered_pentagonal_pyramid_numbers
1040
- Enumerator.new do |y|
1041
- (1..Float::INFINITY).each do |delta|
1042
- y << (2 * delta - 1) * ( 2 * delta**2 - 2 * delta + 3) / 3
1043
- end
1044
- end
1045
- end
1046
-
1047
- def centered_hexagonal_pyramid_numbers
1048
- Enumerator.new do |y|
1049
- (1..Float::INFINITY).each do |delta|
1050
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 6) / 6
1051
- end
1052
- end
1053
- end
1054
-
1055
- def centered_heptagonal_pyramid_numbers
1056
- Enumerator.new do |y|
1057
- (1..Float::INFINITY).each do |delta|
1058
- y << (2 * delta - 1) * (delta**2 - delta + 1)
1059
- end
1060
- end
1061
- end
1062
-
1063
- def centered_octagonal_pyramid_numbers
1064
- Enumerator.new do |y|
1065
- (1..Float::INFINITY).each do |delta|
1066
- y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 6) / 6
1067
- end
1068
- end
1069
- end
1070
-
1071
- def centered_octahedron_numbers
1072
- Enumerator.new do |y|
1073
- (1..Float::INFINITY).each do |delta|
1074
- y << (2 * delta - 1) * (2 * delta**2 - 2 * delta + 3) / 3
1075
- end
1076
- end
1077
- end
1078
-
1079
- def centered_icosahedron_numbers
1080
- Enumerator.new do |y|
1081
- (1..Float::INFINITY).each do |delta|
1082
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 3) / 3
1083
- end
1084
- end
1085
- end
1086
-
1087
- alias_method :centered_cuboctahedron_numbers, :centered_icosahedron_numbers
1088
-
1089
- def centered_dodecahedron_numbers
1090
- Enumerator.new do |y|
1091
- (1..Float::INFINITY).each do |delta|
1092
- y << (2 * delta - 1) * (3 * delta**2 - 3 * delta + 1)
1093
- end
1094
- end
1095
- end
1096
-
1097
- def centered_truncated_tetrahedron_numbers
1098
- Enumerator.new do |y|
1099
- (1..Float::INFINITY).each do |delta|
1100
- y << (2 * delta - 1) * (7 * delta**2 - 7 * delta + 3) / 3
1101
- end
1102
- end
1103
- end
1104
-
1105
- def centered_truncated_cube_numbers
1106
- Enumerator.new do |y|
1107
- (1..Float::INFINITY).each do |delta|
1108
- y << (2 * delta - 1) * (23 * delta**2 - 23 * delta + 3) / 3
1109
- end
1110
- end
1111
- end
1112
-
1113
- def centered_truncated_octahedron_numbers
1114
- Enumerator.new do |y|
1115
- (1..Float::INFINITY).each do |delta|
1116
- y << (2 * delta - 1) * (5 * delta**2 - 5 * delta + 1)
1117
- end
1118
- end
1119
- end
1120
-
1121
- def centered_mgonal_pyramidal_numbers(m)
1122
- Enumerator.new do |y|
1123
- (1..Float::INFINITY).each do |delta|
1124
- y << (m * delta**3 + delta * (6 - m)) / 6
1125
- end
1126
- end
1127
- end
1128
-
1129
- def centered_triangular_pyramidal_numbers
1130
- Enumerator.new do |y|
1131
- (1..Float::INFINITY).each do |delta|
1132
- y << delta * (delta**2 + 1) / 2
1133
- end
1134
- end
1135
- end
1136
-
1137
- def centered_square_pyramidal_numbers
1138
- Enumerator.new do |y|
1139
- (1..Float::INFINITY).each do |delta|
1140
- y << (2 * delta**3 + delta) / 3
1141
- end
1142
- end
1143
- end
1144
-
1145
- def centered_pentagonal_pyramidal_numbers
1146
- Enumerator.new do |y|
1147
- (1..Float::INFINITY).each do |delta|
1148
- y << (5 * delta**3 + delta) / 6
1149
- end
1150
- end
1151
- end
1152
-
1153
- def centered_hexagonal_pyramidal_numbers
1154
- Enumerator.new do |y|
1155
- (1..Float::INFINITY).each do |delta|
1156
- y << delta**3
1157
- end
1158
- end
1159
- end
1160
-
1161
- alias_method :hex_pyramidal_numbers, :centered_hexagonal_pyramidal_numbers
1162
-
1163
- def centered_heptagonal_pyramidal_numbers
1164
- m = 7
1165
- Enumerator.new do |y|
1166
- (1..Float::INFINITY).each do |delta|
1167
- y << (m * delta**3 + delta * (6 - m)) / 6
1168
- end
1169
- end
1170
- end
1171
-
1172
- def centered_octagonal_pyramidal_numbers
1173
- m = 8
1174
- Enumerator.new do |y|
1175
- (1..Float::INFINITY).each do |delta|
1176
- y << (m * delta**3 + delta * (6 - m)) / 6
1177
- end
1178
- end
1179
- end
1180
-
1181
- def centered_nonagonal_pyramidal_numbers
1182
- m = 9
1183
- Enumerator.new do |y|
1184
- (1..Float::INFINITY).each do |delta|
1185
- y << (m * delta**3 + delta * (6 - m)) / 6
1186
- end
1187
- end
1188
- end
1189
-
1190
- def centered_decagonal_pyramidal_numbers
1191
- m = 10
1192
- Enumerator.new do |y|
1193
- (1..Float::INFINITY).each do |delta|
1194
- y << (m * delta**3 + delta * (6 - m)) / 6
1195
- end
1196
- end
1197
- end
1198
-
1199
- def centered_hendecagonal_pyramidal_numbers
1200
- m = 11
1201
- Enumerator.new do |y|
1202
- (1..Float::INFINITY).each do |delta|
1203
- y << (m * delta**3 + delta * (6 - m)) / 6
1204
- end
1205
- end
1206
- end
1207
-
1208
- def centered_dodecagonal_pyramidal_numbers
1209
- m = 12
1210
- Enumerator.new do |y|
1211
- (1..Float::INFINITY).each do |delta|
1212
- y << (m * delta**3 + delta * (6 - m)) / 6
1213
- end
1214
- end
1215
- end
1216
-
1217
- def hexagonal_prism_numbers
1218
- Enumerator.new do |y|
1219
- (1..Float::INFINITY).each do |delta|
1220
- y << delta * ( 3 * delta**2 - 3 * delta + 1)
1221
- end
1222
- end
1223
- end
1224
-
1225
- def mgonal_prism_numbers(m)
1226
- Enumerator.new do |y|
1227
- (1..Float::INFINITY).each do |delta|
1228
- y << delta * (m * delta**2 - m * delta + 2) / 2
1229
- end
1230
- end
1231
- end
1232
-
1233
- def generalized_mgonal_pyramidal_numbers(m, left_index = 0)
1234
- Enumerator.new do |y|
1235
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1236
- y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
1237
- end
1238
- end
1239
- end
1240
-
1241
- def generalized_pentagonal_pyramidal_numbers(left_index = 0)
1242
- m = 5
1243
- Enumerator.new do |y|
1244
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1245
- y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
1246
- end
1247
- end
1248
- end
1249
-
1250
- def generalized_hexagonal_pyramidal_numbers(left_index = 0)
1251
- m = 6
1252
- Enumerator.new do |y|
1253
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1254
- y << (delta * (delta + 1) * ((m - 2) * delta - m + 5 )) / 6
1255
- end
1256
- end
1257
- end
1258
-
1259
- def generalized_cubic_numbers(left_index = 0)
1260
- Enumerator.new do |y|
1261
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1262
- y << delta**3
1263
- end
1264
- end
1265
- end
1266
-
1267
- def generalized_octahedral_numbers(left_index = 0)
1268
- Enumerator.new do |y|
1269
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1270
- y << (2 * delta**2 + 1) * delta / 3
1271
- end
1272
- end
1273
- end
1274
-
1275
- def generalized_icosahedral_numbers(left_index = 0)
1276
- Enumerator.new do |y|
1277
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1278
- y << ( 5 * delta**2 - 5 * delta + 2 ) * delta / 2
1279
- end
1280
- end
1281
- end
1282
-
1283
- def generalized_dodecahedral_numbers(left_index = 0)
1284
- Enumerator.new do |y|
1285
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1286
- y << (9 * delta**2 - 9 * delta + 2) * delta / 2
1287
- end
1288
- end
1289
- end
1290
-
1291
- def generalized_centered_cube_numbers(left_index = 0)
1292
- Enumerator.new do |y|
1293
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1294
- y << (2 * delta - 1) * (delta**2 - delta + 1)
1295
- end
1296
- end
1297
- end
1298
-
1299
- def generalized_centered_tetrahedron_numbers(left_index = 0)
1300
- Enumerator.new do |y|
1301
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1302
- y << (2 * delta - 1) * (delta**2 - delta + 3) / 3
1303
- end
1304
- end
1305
- end
1306
-
1307
- def generalized_centered_square_pyramid_numbers(left_index = 0)
1308
- Enumerator.new do |y|
1309
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1310
- y << ((2 * delta - 1) * (delta**2 - delta + 2)) / 2
1311
- end
1312
- end
1313
- end
1314
-
1315
- def generalized_rhombic_dodecahedral_numbers(left_index = 0)
1316
- Enumerator.new do |y|
1317
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1318
- y << delta**4 - (delta - 1)**4
1319
- end
1320
- end
1321
- end
1322
-
1323
- def generalized_centered_mgonal_pyramidal_numbers(m, left_index = 0)
1324
- Enumerator.new do |y|
1325
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1326
- y << (m * delta**3 + delta * (6 - m)) / 6
1327
- end
1328
- end
1329
- end
1330
-
1331
- def generalized_mgonal_prism_numbers(m, left_index = 0)
1332
- Enumerator.new do |y|
1333
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1334
- y << delta * (m * delta**2 - m * delta + 2) / 2
1335
- end
1336
- end
1337
- end
1338
-
1339
- def generalized_hexagonal_prism_numbers(left_index = 0)
1340
- Enumerator.new do |y|
1341
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1342
- y << delta * (3 * delta**2 - 3 * delta + 1)
1343
- end
1344
- end
1345
- end
1346
-
1347
- def factorial_iter(num)
1348
- t = 1
1349
- (1..num).each do |i|
1350
- t = t * i
1351
- end
1352
- t
1353
- end
1354
-
1355
- def binomial_coefficient(n, k)
1356
- factorial_iter(n) / (factorial_iter(k) * factorial_iter(n - k))
1357
- end
1358
-
1359
- private_class_method :factorial_iter
1360
- private_class_method :binomial_coefficient
1361
-
1362
- def pentatope_numbers
1363
- Enumerator.new do |y|
1364
- (1..Float::INFINITY).each do |delta|
1365
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3)) / 24
1366
- end
1367
- end
1368
- end
1369
-
1370
- alias_method :hypertetrahedral_numbers, :pentatope_numbers
1371
- alias_method :triangulotriangular_numbers, :pentatope_numbers
1372
-
1373
- def rising_factorial(n, k)
1374
- t = 1
1375
- (n..(n + k - 1)).each do |i|
1376
- t *= i
1377
- end
1378
- t
1379
- end
1380
-
1381
- def k_dimensional_hypertetrahedron_numbers(k)
1382
- Enumerator.new do |y|
1383
- (1..Float::INFINITY).each do |delta|
1384
- y << rising_factorial(delta, k) / factorial_iter(k)
1385
- end
1386
- end
1387
- end
1388
-
1389
- alias_method :k_hypertetrahedron_numbers, :k_dimensional_hypertetrahedron_numbers
1390
- alias_method :regular_k_polytopic_numbers, :k_dimensional_hypertetrahedron_numbers
1391
- alias_method :figurate_numbers_of_order_k, :k_dimensional_hypertetrahedron_numbers
1392
-
1393
-
1394
- def five_dimensional_hypertetrahedron_numbers
1395
- Enumerator.new do |y|
1396
- (1..Float::INFINITY).each do |delta|
1397
- y << rising_factorial(delta, 5) / factorial_iter(5)
1398
- end
1399
- end
1400
- end
1401
-
1402
- def six_dimensional_hypertetrahedron_numbers
1403
- Enumerator.new do |y|
1404
- (1..Float::INFINITY).each do |delta|
1405
- y << rising_factorial(delta, 6) / factorial_iter(6)
1406
- end
1407
- end
1408
- end
1409
-
1410
- def binomial_coefficient_k_dimensional_hypertetrahedron_numbers(k)
1411
- Enumerator.new do |y|
1412
- (1..Float::INFINITY).each do |delta|
1413
- y << binomial_coefficient(delta + (k - 1), k)
1414
- end
1415
- end
1416
- end
1417
-
1418
- def biquadratic_numbers
1419
- Enumerator.new do |y|
1420
- (1..Float::INFINITY).each do |delta|
1421
- y << delta**4
1422
- end
1423
- end
1424
- end
1425
-
1426
- def k_dimensional_hypercube_numbers(k)
1427
- Enumerator.new do |y|
1428
- (1..Float::INFINITY).each do |delta|
1429
- y << delta**k
1430
- end
1431
- end
1432
- end
1433
-
1434
- alias_method :k_hypercube_numbers, :k_dimensional_hypercube_numbers
1435
-
1436
- def five_dimensional_hypercube_numbers
1437
- Enumerator.new do |y|
1438
- (1..Float::INFINITY).each do |delta|
1439
- y << delta**5
1440
- end
1441
- end
1442
- end
1443
-
1444
- def six_dimensional_hypercube_numbers
1445
- Enumerator.new do |y|
1446
- (1..Float::INFINITY).each do |delta|
1447
- y << delta**6
1448
- end
1449
- end
1450
- end
1451
-
1452
- def hyperoctahedral_numbers
1453
- Enumerator.new do |y|
1454
- (1..Float::INFINITY).each do |delta|
1455
- y << (delta**2 * (delta**2 + 2)) / 3
1456
- end
1457
- end
1458
- end
1459
-
1460
- alias_method :hexadecachoron_numbers, :hyperoctahedral_numbers
1461
- alias_method :four_cross_polytope_numbers, :hyperoctahedral_numbers
1462
- alias_method :four_orthoplex_numbers, :hyperoctahedral_numbers
1463
-
1464
- def hypericosahedral_numbers
1465
- Enumerator.new do |y|
1466
- (1..Float::INFINITY).each do |delta|
1467
- y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
1468
- end
1469
- end
1470
- end
1471
-
1472
- alias_method :tetraplex_numbers, :hypericosahedral_numbers
1473
- alias_method :polytetrahedron_numbers, :hypericosahedral_numbers
1474
- alias_method :hexacosichoron_numbers, :hypericosahedral_numbers
1475
-
1476
- def hyperdodecahedral_numbers
1477
- Enumerator.new do |y|
1478
- (1..Float::INFINITY).each do |delta|
1479
- y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
1480
- end
1481
- end
1482
- end
1483
-
1484
- alias_method :hecatonicosachoron_numbers, :hyperdodecahedral_numbers
1485
- alias_method :dodecaplex_numbers, :hyperdodecahedral_numbers
1486
- alias_method :polydodecahedron_numbers, :hyperdodecahedral_numbers
1487
-
1488
- def polyoctahedral_numbers
1489
- Enumerator.new do |y|
1490
- (1..Float::INFINITY).each do |delta|
1491
- y << delta**2 * (3 * delta**2 - 4 * delta + 2)
1492
- end
1493
- end
1494
- end
1495
-
1496
- alias_method :icositetrachoron_numbers, :polyoctahedral_numbers
1497
- alias_method :octaplex_numbers, :polyoctahedral_numbers
1498
- alias_method :hyperdiamond_numbers, :polyoctahedral_numbers
1499
-
1500
- def four_dimensional_hyperoctahedron_numbers
1501
- Enumerator.new do |y|
1502
- (1..Float::INFINITY).each do |delta|
1503
- y << delta**2 * (delta**2 + 2) / 3
1504
- end
1505
- end
1506
- end
1507
-
1508
- def five_dimensional_hyperoctahedron_numbers
1509
- Enumerator.new do |y|
1510
- (1..Float::INFINITY).each do |delta|
1511
- y << delta * (2 * delta**4 + 10 * delta**2 + 3) / 15
1512
- end
1513
- end
1514
- end
1515
-
1516
- def six_dimensional_hyperoctahedron_numbers
1517
- Enumerator.new do |y|
1518
- (1..Float::INFINITY).each do |delta|
1519
- y << delta**2 * (2 * delta**4 + 20 * delta**2 + 23) / 45
1520
- end
1521
- end
1522
- end
1523
-
1524
- def seven_dimensional_hyperoctahedron_numbers
1525
- Enumerator.new do |y|
1526
- (1..Float::INFINITY).each do |delta|
1527
- y << (4 * delta**6 + 70 * delta**4 + 196 * delta**2 + 45) * delta / 315
1528
- end
1529
- end
1530
- end
1531
-
1532
- def eight_dimensional_hyperoctahedron_numbers
1533
- Enumerator.new do |y|
1534
- (1..Float::INFINITY).each do |delta|
1535
- y << (delta**6 + 28 * delta**4 + 154 * delta**2 + 132) * delta**2 / 315
1536
- end
1537
- end
1538
- end
1539
-
1540
- def nine_dimensional_hyperoctahedron_numbers
1541
- Enumerator.new do |y|
1542
- (1..Float::INFINITY).each do |delta|
1543
- y << (2 * delta**8 + 84 * delta**6 + 798 * delta**4 + 1636 * delta**2 + 315) * delta / 2835
1544
- end
1545
- end
1546
- end
1547
-
1548
- def ten_dimensional_hyperoctahedron_numbers
1549
- Enumerator.new do |y|
1550
- (1..Float::INFINITY).each do |delta|
1551
- y << (2 * delta**8 + 120 * delta**6 + 1806 * delta**4 + 7180 * delta**2 + 5067) * delta**2 / 14175
1552
- end
1553
- end
1554
- end
1555
-
1556
- def k_dimensional_hyperoctahedron_numbers(k)
1557
- Enumerator.new do |y|
1558
- (1..Float::INFINITY).each do |delta|
1559
- a = 0
1560
- (0..(k - 1)).each do |i|
1561
- a += binomial_coefficient(k - 1, i) * (rising_factorial(delta - i, k) / factorial_iter(k))
1562
- end
1563
- y << a
1564
- end
1565
- end
1566
- end
1567
-
1568
- alias_method :k_cross_polytope_numbers, :k_dimensional_hyperoctahedron_numbers
1569
-
1570
- def four_dimensional_mgonal_pyramidal_numbers(m)
1571
- Enumerator.new do |y|
1572
- (1..Float::INFINITY).each do |delta|
1573
- y << (delta * (delta + 1) * (delta + 2) * ((m - 2) * delta - m + 6)) / 24
1574
- end
1575
- end
1576
- end
1577
-
1578
- alias_method :mgonal_pyramidal_numbers_of_the_second_order, :four_dimensional_mgonal_pyramidal_numbers
1579
-
1580
- def four_dimensional_square_pyramidal_numbers
1581
- Enumerator.new do |y|
1582
- (1..Float::INFINITY).each do |delta|
1583
- y << (delta * (delta + 1) * (delta + 2) * ((4 - 2) * delta - 4 + 6)) / 24
1584
- end
1585
- end
1586
- end
1587
-
1588
- def four_dimensional_pentagonal_pyramidal_numbers
1589
- Enumerator.new do |y|
1590
- (1..Float::INFINITY).each do |delta|
1591
- y << (delta * (delta + 1) * (delta + 2) * ((5 - 2) * delta - 5 + 6)) / 24
1592
- end
1593
- end
1594
- end
1595
-
1596
- def four_dimensional_hexagonal_pyramidal_numbers
1597
- Enumerator.new do |y|
1598
- (1..Float::INFINITY).each do |delta|
1599
- y << (delta * (delta + 1) * (delta + 2) * ((6 - 2) * delta - 6 + 6)) / 24
1600
- end
1601
- end
1602
- end
1603
-
1604
- def four_dimensional_heptagonal_pyramidal_numbers
1605
- Enumerator.new do |y|
1606
- (1..Float::INFINITY).each do |delta|
1607
- y << (delta * (delta + 1) * (delta + 2) * ((7 - 2) * delta - 7 + 6)) / 24
1608
- end
1609
- end
1610
- end
1611
-
1612
- def four_dimensional_octagonal_pyramidal_numbers
1613
- Enumerator.new do |y|
1614
- (1..Float::INFINITY).each do |delta|
1615
- y << (delta * (delta + 1) * (delta + 2) * ((8 - 2) * delta - 8 + 6)) / 24
1616
- end
1617
- end
1618
- end
1619
-
1620
- def four_dimensional_nonagonal_pyramidal_numbers
1621
- Enumerator.new do |y|
1622
- (1..Float::INFINITY).each do |delta|
1623
- y << (delta * (delta + 1) * (delta + 2) * ((9 - 2) * delta - 9 + 6)) / 24
1624
- end
1625
- end
1626
- end
1627
-
1628
- def four_dimensional_decagonal_pyramidal_numbers
1629
- Enumerator.new do |y|
1630
- (1..Float::INFINITY).each do |delta|
1631
- y << (delta * (delta + 1) * (delta + 2) * ((10 - 2) * delta - 10 + 6)) / 24
1632
- end
1633
- end
1634
- end
1635
-
1636
- def four_dimensional_hendecagonal_pyramidal_numbers
1637
- Enumerator.new do |y|
1638
- (1..Float::INFINITY).each do |delta|
1639
- y << (delta * (delta + 1) * (delta + 2) * ((11 - 2) * delta - 11 + 6)) / 24
1640
- end
1641
- end
1642
- end
1643
-
1644
- def four_dimensional_dodecagonal_pyramidal_numbers
1645
- Enumerator.new do |y|
1646
- (1..Float::INFINITY).each do |delta|
1647
- y << (delta * (delta + 1) * (delta + 2) * ((12 - 2) * delta - 12 + 6)) / 24
1648
- end
1649
- end
1650
- end
1651
-
1652
- def pseudo_rising_factorial(n, k)
1653
- t = 1
1654
- (n..(n + k - 2)).each do |i|
1655
- t *= i
1656
- end
1657
- t
1658
- end
1659
-
1660
- def pseudo_pochhammer_function(n, k)
1661
- (n..(n + k - 2)).reduce(:*)
1662
- end
1663
-
1664
- private_class_method :pseudo_rising_factorial
1665
- private_class_method :pseudo_pochhammer_function
1666
-
1667
- def k_dimensional_mgonal_pyramidal_numbers(k, m)
1668
- Enumerator.new do |y|
1669
- (1..Float::INFINITY).each do |n|
1670
- y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
1671
- factorial_iter(k)
1672
- end
1673
- end
1674
- end
1675
-
1676
- alias_method :mgonal_pyramidal_numbers_of_the_k_2_th_order, :k_dimensional_mgonal_pyramidal_numbers
1677
-
1678
- def five_dimensional_mgonal_pyramidal_numbers(m)
1679
- Enumerator.new do |y|
1680
- (1..Float::INFINITY).each do |delta|
1681
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * ((m - 2) * delta - m + 7)) / 120
1682
- end
1683
- end
1684
- end
1685
-
1686
- def five_dimensional_square_pyramidal_numbers
1687
- Enumerator.new do |y|
1688
- k = 5
1689
- m = 4
1690
- (1..Float::INFINITY).each do |delta|
1691
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1692
- factorial_iter(k)
1693
- end
1694
- end
1695
- end
1696
-
1697
- def five_dimensional_pentagonal_pyramidal_numbers
1698
- Enumerator.new do |y|
1699
- k = 5
1700
- m = 5
1701
- (1..Float::INFINITY).each do |delta|
1702
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1703
- factorial_iter(k)
1704
- end
1705
- end
1706
- end
1707
-
1708
- def five_dimensional_hexagonal_pyramidal_numbers
1709
- Enumerator.new do |y|
1710
- k = 5
1711
- m = 6
1712
- (1..Float::INFINITY).each do |delta|
1713
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1714
- factorial_iter(k)
1715
- end
1716
- end
1717
- end
1718
-
1719
- def five_dimensional_heptagonal_pyramidal_numbers
1720
- Enumerator.new do |y|
1721
- k = 5
1722
- m = 7
1723
- (1..Float::INFINITY).each do |delta|
1724
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1725
- factorial_iter(k)
1726
- end
1727
- end
1728
- end
1729
-
1730
- def five_dimensional_octagonal_pyramidal_numbers
1731
- Enumerator.new do |y|
1732
- k = 5
1733
- m = 8
1734
- (1..Float::INFINITY).each do |delta|
1735
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1736
- factorial_iter(k)
1737
- end
1738
- end
1739
- end
1740
-
1741
- def six_dimensional_mgonal_pyramidal_numbers(m)
1742
- Enumerator.new do |y|
1743
- (1..Float::INFINITY).each do |delta|
1744
- y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * (delta + 4) * ((m - 2) * delta - m + 8)) / 720
1745
- end
1746
- end
1747
- end
1748
-
1749
- def six_dimensional_square_pyramidal_numbers
1750
- Enumerator.new do |y|
1751
- k = 6
1752
- m = 4
1753
- (1..Float::INFINITY).each do |delta|
1754
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1755
- factorial_iter(k)
1756
- end
1757
- end
1758
- end
1759
-
1760
- def six_dimensional_pentagonal_pyramidal_numbers
1761
- Enumerator.new do |y|
1762
- k = 6
1763
- m = 5
1764
- (1..Float::INFINITY).each do |delta|
1765
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1766
- factorial_iter(k)
1767
- end
1768
- end
1769
- end
1770
-
1771
- def six_dimensional_hexagonal_pyramidal_numbers
1772
- Enumerator.new do |y|
1773
- k = 6
1774
- m = 6
1775
- (1..Float::INFINITY).each do |delta|
1776
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1777
- factorial_iter(k)
1778
- end
1779
- end
1780
- end
1781
-
1782
- def six_dimensional_heptagonal_pyramidal_numbers
1783
- Enumerator.new do |y|
1784
- k = 6
1785
- m = 7
1786
- (1..Float::INFINITY).each do |delta|
1787
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1788
- factorial_iter(k)
1789
- end
1790
- end
1791
- end
1792
-
1793
- def six_dimensional_octagonal_pyramidal_numbers
1794
- Enumerator.new do |y|
1795
- k = 6
1796
- m = 8
1797
- (1..Float::INFINITY).each do |delta|
1798
- y << (pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) /
1799
- factorial_iter(k)
1800
- end
1801
- end
1802
- end
1803
-
1804
- def centered_biquadratic_numbers
1805
- Enumerator.new do |y|
1806
- a = 0
1807
- (1..Float::INFINITY).each do |delta|
1808
- a += delta**4 - (delta - 2)**4
1809
- y << a + 1
1810
- end
1811
- end
1812
- end
1813
-
1814
- def k_dimensional_centered_hypercube_numbers(k)
1815
- Enumerator.new do |y|
1816
- (1..Float::INFINITY).each do |delta|
1817
- y << delta**k + (delta - 1)**k
1818
- end
1819
- end
1820
- end
1821
-
1822
- def five_dimensional_centered_hypercube_numbers
1823
- Enumerator.new do |y|
1824
- (1..Float::INFINITY).each do |delta|
1825
- y << delta**5 + (delta - 1)**5
1826
- end
1827
- end
1828
- end
1829
-
1830
- def six_dimensional_centered_hypercube_numbers
1831
- Enumerator.new do |y|
1832
- (1..Float::INFINITY).each do |delta|
1833
- y << delta**6 + (delta - 1)**6
1834
- end
1835
- end
1836
- end
1837
-
1838
- def centered_polytope_numbers
1839
- Enumerator.new do |y|
1840
- (1..Float::INFINITY).each do |delta|
1841
- y << (5 * delta**4 - 10 * delta**3 + 55 * delta**2 - 50 * delta + 24) / 24
1842
- end
1843
- end
1844
- end
1845
-
1846
- def helper_centered_hypertetrahedron(k, n)
1847
- return 1 if n == 1
1848
- t = binomial_coefficient(k + 1, k)
1849
- return t if n == 2
1850
- tau = 0
1851
- (0..k-1).each do |i|
1852
- tau += binomial_coefficient(k + 1, k - i) * binomial_coefficient(n - 2, i)
1853
- end
1854
- tau
1855
- end
1856
-
1857
- def acc_helper_centered_hypertetrahedron(k, n)
1858
- a = 0
1859
- (1..n).each do |j|
1860
- a += helper_centered_hypertetrahedron(k, j)
1861
- end
1862
- a
1863
- end
1864
-
1865
- private_class_method :helper_centered_hypertetrahedron
1866
- private_class_method :acc_helper_centered_hypertetrahedron
1867
-
1868
- def k_dimensional_centered_hypertetrahedron_numbers(k)
1869
- Enumerator.new do |y|
1870
- (1..Float::INFINITY).each do |n|
1871
- y << acc_helper_centered_hypertetrahedron(k, n)
1872
- end
1873
- end
1874
- end
1875
-
1876
- def five_dimensional_centered_hypertetrahedron_numbers
1877
- Enumerator.new do |y|
1878
- (1..Float::INFINITY).each do |n|
1879
- y << acc_helper_centered_hypertetrahedron(5, n)
1880
- end
1881
- end
1882
- end
1883
-
1884
- def six_dimensional_centered_hypertetrahedron_numbers
1885
- Enumerator.new do |y|
1886
- (1..Float::INFINITY).each do |n|
1887
- y << acc_helper_centered_hypertetrahedron(6, n)
1888
- end
1889
- end
1890
- end
1891
-
1892
- def centered_hyperoctahedral_numbers
1893
- Enumerator.new do |y|
1894
- (1..Float::INFINITY).each do |delta|
1895
- y << (2 * delta**4 - 4 * delta**3 + 10 * delta**2 - 8 * delta + 3) / 3
1896
- end
1897
- end
1898
- end
1899
-
1900
- alias_method :orthoplex_numbers, :centered_hyperoctahedral_numbers
1901
-
1902
- def nexus_numbers(k)
1903
- Enumerator.new do |y|
1904
- (0..Float::INFINITY).each do |delta|
1905
- y << (delta + 1)**(k + 1) - delta**(k + 1)
1906
- end
1907
- end
1908
- end
1909
-
1910
- def ext_int_double_summation(k, n)
1911
- t = ((2**(1)) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
1912
- a = 0
1913
- (1..(n - 1)).each do |j|
1914
- (0..(k - 1)).each do |i|
1915
- a += (2**(1 + i)) * binomial_coefficient(k, 1 + i) * binomial_coefficient(j, i)
1916
- end
1917
- end
1918
- (1 + t + a)
1919
- end
1920
-
1921
- private_class_method :ext_int_double_summation
1922
-
1923
- def k_dimensional_centered_hyperoctahedron_numbers(k)
1924
- Enumerator.new do |y|
1925
- y << 1
1926
- (1..Float::INFINITY).each do |n|
1927
- y << ext_int_double_summation(k, n)
1928
- end
1929
- end
1930
- end
1931
-
1932
- def five_dimensional_centered_hyperoctahedron_numbers
1933
- Enumerator.new do |y|
1934
- y << 1
1935
- (1..Float::INFINITY).each do |n|
1936
- y << ext_int_double_summation(5, n)
1937
- end
1938
- end
1939
- end
1940
-
1941
- def six_dimensional_centered_hyperoctahedron_numbers
1942
- Enumerator.new do |y|
1943
- y << 1
1944
- (1..Float::INFINITY).each do |n|
1945
- y << ext_int_double_summation(6, n)
1946
- end
1947
- end
1948
- end
1949
-
1950
- def generalized_pentatope_numbers(left_index = 0)
1951
- Enumerator.new do |y|
1952
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1953
- y << delta * (delta + 1) * (delta + 2) * (delta + 3) / 24
1954
- end
1955
- end
1956
- end
1957
-
1958
- def generalized_k_dimensional_hypertetrahedron_numbers(k, left_index = 0)
1959
- Enumerator.new do |y|
1960
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1961
- y << rising_factorial(delta, k) / factorial_iter(k)
1962
- end
1963
- end
1964
- end
1965
-
1966
- def generalized_biquadratic_numbers(left_index = 0)
1967
- Enumerator.new do |y|
1968
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1969
- y << delta**4
1970
- end
1971
- end
1972
- end
1973
-
1974
- def generalized_k_dimensional_hypercube_numbers(k = 5, left_index = 0)
1975
- Enumerator.new do |y|
1976
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1977
- y << delta**k
1978
- end
1979
- end
1980
- end
1981
-
1982
- def generalized_hyperoctahedral_numbers(left_index = 0)
1983
- Enumerator.new do |y|
1984
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1985
- y << (delta**2 * (delta**2 + 2)) / 3
1986
- end
1987
- end
1988
- end
1989
-
1990
- def generalized_k_dimensional_hyperoctahedron_numbers(k = 5, left_index = 0)
1991
- Enumerator.new do |y|
1992
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
1993
- a = 0
1994
- (0..(k - 1)).each do |i|
1995
- a += binomial_coefficient(k - 1, i) * (rising_factorial(delta - i, k) / factorial_iter(k))
1996
- end
1997
- y << a
1998
- end
1999
- end
2000
- end
2001
-
2002
- def generalized_hyperdodecahedral_numbers(left_index = 0)
2003
- Enumerator.new do |y|
2004
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
2005
- y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
2006
- end
2007
- end
2008
- end
2009
-
2010
- def generalized_hypericosahedral_numbers(left_index = 0)
2011
- Enumerator.new do |y|
2012
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
2013
- y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
2014
- end
2015
- end
2016
- end
2017
-
2018
- def generalized_polyoctahedral_numbers(left_index = 0)
2019
- Enumerator.new do |y|
2020
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
2021
- y << delta**2 * (3 * delta**2 - 4 * delta + 2)
2022
- end
2023
- end
2024
- end
2025
-
2026
- def generalized_k_dimensional_mgonal_pyramidal_numbers(k, m, left_index = 0)
2027
- Enumerator.new do |y|
2028
- ((-1 * left_index.abs)..Float::INFINITY).each do |n|
2029
- y << (pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) /
2030
- factorial_iter(k)
2031
- end
2032
- end
2033
- end
2034
-
2035
- def generalized_k_dimensional_centered_hypercube_numbers(k, left_index = 0)
2036
- Enumerator.new do |y|
2037
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
2038
- y << delta**k + (delta - 1)**k
2039
- end
2040
- end
2041
- end
2042
-
2043
- def gen_acc_helper_centered_hypertetrahedron(k, n)
2044
- a = 0
2045
- (1..n.abs).each do |j|
2046
- a += helper_centered_hypertetrahedron(k, j)
2047
- end
2048
- n > 0 ? a : -a
2049
- end
2050
-
2051
- private_class_method :gen_acc_helper_centered_hypertetrahedron
2052
-
2053
- def generalized_k_dimensional_centered_hypertetrahedron_numbers(k, left_index = 0)
2054
- Enumerator.new do |y|
2055
- ((-1 * left_index.abs)..Float::INFINITY).each do |n|
2056
- y << gen_acc_helper_centered_hypertetrahedron(k, n)
2057
- end
2058
- end
2059
- end
2060
-
2061
- def gen_ext_int_double_summation(k, n)
2062
- is_positive_n = n
2063
- n = n.abs
2064
- t = ((2) * binomial_coefficient(k, 1) * binomial_coefficient(1, 0))
2065
- a = 0
2066
- (1..(n - 1)).each do |j|
2067
- (0..(k - 1)).each do |i|
2068
- a += (2**(1 + i)) * binomial_coefficient(k, 1 + i) * binomial_coefficient(j, i)
2069
- end
2070
- end
2071
- is_positive_n > 0 ? (1 + t + a) : (1 + t + a) * -1
2072
- end
2073
-
2074
- private_class_method :gen_ext_int_double_summation
2075
-
2076
- def generalized_k_dimensional_centered_hyperoctahedron_numbers(k, left_index = 0)
2077
- Enumerator.new do |y|
2078
- ((-1 * left_index.abs)..Float::INFINITY).each do |n|
2079
- y << 1 if n == 1
2080
- y << gen_ext_int_double_summation(k, n) if n != 0
2081
- end
2082
- end
2083
- end
2084
-
2085
- def generalized_nexus_numbers(k, left_index = 0)
2086
- Enumerator.new do |y|
2087
- ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
2088
- y << (delta + 1)**(k + 1) - delta**(k + 1)
2089
- end
2090
- end
2091
- end
2092
-
2093
- require 'prime'
2094
-
2095
- def cuban_numbers
2096
- Enumerator.new do |y|
2097
- (1..Float::INFINITY).each do |delta|
2098
- y << (delta + 1)**3 - delta**3
2099
- end
2100
- end
2101
- end
2102
-
2103
- alias_method :cuban_prime_numbers, :cuban_numbers
2104
-
2105
- def helper_quartan_numbers(delta)
2106
- seq = [2]
2107
- (1..delta).each do |x|
2108
- (x + 1..delta).each do |y|
2109
- q = x**4 + y**4
2110
- seq << q if Prime.prime?(q)
2111
- end
2112
- end
2113
- seq.sort
2114
- end
2115
-
2116
- private_class_method :helper_quartan_numbers
2117
-
2118
- def quartan_numbers
2119
- Enumerator.new do |y|
2120
- (1..Float::INFINITY).each do |delta|
2121
- y << helper_quartan_numbers(delta)[delta - 1]
2122
- end
2123
- end
2124
- end
2125
-
2126
- def pell_numbers
2127
- pell_numbers = [0, 1]
2128
- Enumerator.new do |y|
2129
- y << 0
2130
- y << 1
2131
- (2..Float::INFINITY).each do |delta|
2132
- y << pell_numbers[delta] = 2 * pell_numbers[delta - 1] + pell_numbers[delta - 2]
2133
- end
2134
- end
2135
- end
2136
-
2137
- def is_prime_number(p)
2138
- (2..Math.sqrt(p)).none? do |delta|
2139
- p % delta == 0
2140
- end
2141
- end
2142
-
2143
- def helper_carmichael_number_math_def(n)
2144
- if !is_prime_number(n)
2145
- (2..(n - 1)).each do |a|
2146
- if n.gcd(a) == 1
2147
- if (a.pow(n - 1, n)) != 1
2148
- return nil
2149
- end
2150
- end
2151
- end
2152
- n
2153
- end
2154
- end
2155
-
2156
- def helper_carmichael_number(n)
2157
- if !Prime.prime?(n)
2158
- (2..(Math.sqrt(n))).each do |a|
2159
- if (n).gcd(a) == 1
2160
- return if (a.pow(n - 1, n)) != 1
2161
- end
2162
- end
2163
- n
2164
- end
2165
- end
2166
-
2167
- private_class_method :is_prime_number
2168
- private_class_method :helper_carmichael_number_math_def
2169
- private_class_method :helper_carmichael_number
2170
-
2171
- def carmichael_numbers
2172
- Enumerator.new do |y|
2173
- (561..Float::INFINITY).each do |delta|
2174
- num_seq = helper_carmichael_number(delta)
2175
- if num_seq != nil
2176
- y << num_seq
2177
- end
2178
- end
2179
- end
2180
- end
2181
-
2182
- def helper_stern_prime_numbers(delta)
2183
- prime_list = Prime.first(delta)
2184
- q = prime_list[-1]
2185
- b = 1
2186
- while (2 * b**2) < q
2187
- prime_list[0..-2].each do |p|
2188
- if q == p + (2 * b**2)
2189
- return nil
2190
- end
2191
- end
2192
- b += 1
2193
- end
2194
- q
2195
- end
2196
-
2197
- private_class_method :helper_stern_prime_numbers
2198
-
2199
- def stern_prime_numbers(infty = false)
2200
- Enumerator.new do |y|
2201
- max_term = infty == false ? 238 : float::INFINITY
2202
- (1..max_term).each do |delta|
2203
- num_seq = helper_stern_prime_numbers(delta)
2204
- if num_seq != nil
2205
- y << num_seq
2206
- end
2207
- end
2208
- end
2209
- end
2210
-
2211
- def helper_apocalyptic_numbers(delta)
2212
- search_666 = (2**delta).to_s
2213
- len_666 = search_666.length - 1
2214
- (0..len_666).each do |index|
2215
- if search_666[index, 3] == '666' && search_666[index + 1] == '6' && search_666[index + 2] == '6'
2216
- return delta
2217
- end
2218
- end
2219
- nil
2220
- end
2221
-
2222
- private_class_method :helper_apocalyptic_numbers
2223
-
2224
- def apocalyptic_numbers
2225
- Enumerator.new do |y|
2226
- (157..Float::INFINITY).each do |delta|
2227
- y << helper_apocalyptic_numbers(delta) if helper_apocalyptic_numbers(delta) != nil
2228
- end
2229
- end
2230
- end
2231
-
7
+ extend PlaneFigurateNumbers
8
+ extend SpaceFigurateNumbers
9
+ extend MultiDimensionalFigurateNumbers
2232
10
  end
11
+
12
+ PlaneFigurateNumbers = FigurateNumbers::PlaneFigurateNumbers
13
+ SpaceFigurateNumbers = FigurateNumbers::SpaceFigurateNumbers
14
+ MultiDimensionalFigurateNumbers = FigurateNumbers::MultiDimensionalFigurateNumbers