figurate_numbers 1.3.0 → 1.4.0

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.
@@ -0,0 +1,842 @@
1
+ require_relative 'utils/utils'
2
+
3
+ module MultiDimensionalFigurateNumbers
4
+ extend self
5
+
6
+ def pentatope
7
+ Enumerator.new do |y|
8
+ (1..Float::INFINITY).each do |delta|
9
+ y << (delta * (delta + 1) * (delta + 2) * (delta + 3)) / 24
10
+ end
11
+ end
12
+ end
13
+
14
+ alias_method :hypertetrahedral, :pentatope
15
+ alias_method :triangulotriangular, :pentatope
16
+
17
+
18
+ def k_dimensional_hypertetrahedron(k)
19
+ Enumerator.new do |y|
20
+ (1..Float::INFINITY).each do |delta|
21
+ y << Utils.rising_factorial(delta, k) / Utils.factorial_iter(k)
22
+ end
23
+ end
24
+ end
25
+
26
+ alias_method :k_hypertetrahedron, :k_dimensional_hypertetrahedron
27
+ alias_method :regular_k_polytopic, :k_dimensional_hypertetrahedron
28
+ alias_method :figurate_numbers_of_order_k, :k_dimensional_hypertetrahedron
29
+
30
+
31
+ def five_dimensional_hypertetrahedron
32
+ Enumerator.new do |y|
33
+ (1..Float::INFINITY).each do |delta|
34
+ y << Utils.rising_factorial(delta, 5) / Utils.factorial_iter(5)
35
+ end
36
+ end
37
+ end
38
+
39
+ def six_dimensional_hypertetrahedron
40
+ Enumerator.new do |y|
41
+ (1..Float::INFINITY).each do |delta|
42
+ y << Utils.rising_factorial(delta, 6) / Utils.factorial_iter(6)
43
+ end
44
+ end
45
+ end
46
+
47
+ def binomial_coefficient_k_dimensional_hypertetrahedron(k)
48
+ Enumerator.new do |y|
49
+ (1..Float::INFINITY).each do |delta|
50
+ y << Utils.binomial_coefficient(delta + (k - 1), k)
51
+ end
52
+ end
53
+ end
54
+
55
+ def biquadratic
56
+ Enumerator.new do |y|
57
+ (1..Float::INFINITY).each do |delta|
58
+ y << delta**4
59
+ end
60
+ end
61
+ end
62
+
63
+ def k_dimensional_hypercube(k)
64
+ Enumerator.new do |y|
65
+ (1..Float::INFINITY).each do |delta|
66
+ y << delta**k
67
+ end
68
+ end
69
+ end
70
+
71
+ alias_method :k_hypercube, :k_dimensional_hypercube
72
+
73
+ def five_dimensional_hypercube
74
+ Enumerator.new do |y|
75
+ (1..Float::INFINITY).each do |delta|
76
+ y << delta**5
77
+ end
78
+ end
79
+ end
80
+
81
+ def six_dimensional_hypercube
82
+ Enumerator.new do |y|
83
+ (1..Float::INFINITY).each do |delta|
84
+ y << delta**6
85
+ end
86
+ end
87
+ end
88
+
89
+ def hyperoctahedral
90
+ Enumerator.new do |y|
91
+ (1..Float::INFINITY).each do |delta|
92
+ y << (delta**2 * (delta**2 + 2)) / 3
93
+ end
94
+ end
95
+ end
96
+
97
+ alias_method :hexadecachoron, :hyperoctahedral
98
+ alias_method :four_cross_polytope, :hyperoctahedral
99
+ alias_method :four_orthoplex, :hyperoctahedral
100
+
101
+ def hypericosahedral
102
+ Enumerator.new do |y|
103
+ (1..Float::INFINITY).each do |delta|
104
+ y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
105
+ end
106
+ end
107
+ end
108
+
109
+ alias_method :tetraplex, :hypericosahedral
110
+ alias_method :polytetrahedron, :hypericosahedral
111
+ alias_method :hexacosichoron, :hypericosahedral
112
+
113
+ def hyperdodecahedral
114
+ Enumerator.new do |y|
115
+ (1..Float::INFINITY).each do |delta|
116
+ y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
117
+ end
118
+ end
119
+ end
120
+
121
+ alias_method :hecatonicosachoron, :hyperdodecahedral
122
+ alias_method :dodecaplex, :hyperdodecahedral
123
+ alias_method :polydodecahedron, :hyperdodecahedral
124
+
125
+ def polyoctahedral
126
+ Enumerator.new do |y|
127
+ (1..Float::INFINITY).each do |delta|
128
+ y << delta**2 * (3 * delta**2 - 4 * delta + 2)
129
+ end
130
+ end
131
+ end
132
+
133
+ alias_method :icositetrachoron, :polyoctahedral
134
+ alias_method :octaplex, :polyoctahedral
135
+ alias_method :hyperdiamond, :polyoctahedral
136
+
137
+ def four_dimensional_hyperoctahedron
138
+ Enumerator.new do |y|
139
+ (1..Float::INFINITY).each do |delta|
140
+ y << delta**2 * (delta**2 + 2) / 3
141
+ end
142
+ end
143
+ end
144
+
145
+ def five_dimensional_hyperoctahedron
146
+ Enumerator.new do |y|
147
+ (1..Float::INFINITY).each do |delta|
148
+ y << delta * (2 * delta**4 + 10 * delta**2 + 3) / 15
149
+ end
150
+ end
151
+ end
152
+
153
+ def six_dimensional_hyperoctahedron
154
+ Enumerator.new do |y|
155
+ (1..Float::INFINITY).each do |delta|
156
+ y << delta**2 * (2 * delta**4 + 20 * delta**2 + 23) / 45
157
+ end
158
+ end
159
+ end
160
+
161
+ def seven_dimensional_hyperoctahedron
162
+ Enumerator.new do |y|
163
+ (1..Float::INFINITY).each do |delta|
164
+ y << (4 * delta**6 + 70 * delta**4 + 196 * delta**2 + 45) * delta / 315
165
+ end
166
+ end
167
+ end
168
+
169
+ def eight_dimensional_hyperoctahedron
170
+ Enumerator.new do |y|
171
+ (1..Float::INFINITY).each do |delta|
172
+ y << (delta**6 + 28 * delta**4 + 154 * delta**2 + 132) * delta**2 / 315
173
+ end
174
+ end
175
+ end
176
+
177
+ def nine_dimensional_hyperoctahedron
178
+ Enumerator.new do |y|
179
+ (1..Float::INFINITY).each do |delta|
180
+ y << (2 * delta**8 + 84 * delta**6 + 798 * delta**4 + 1636 * delta**2 + 315) * delta / 2835
181
+ end
182
+ end
183
+ end
184
+
185
+ def ten_dimensional_hyperoctahedron
186
+ Enumerator.new do |y|
187
+ (1..Float::INFINITY).each do |delta|
188
+ y << (2 * delta**8 + 120 * delta**6 + 1806 * delta**4 + 7180 * delta**2 + 5067) * delta**2 / 14175
189
+ end
190
+ end
191
+ end
192
+
193
+ def k_dimensional_hyperoctahedron(k)
194
+ Enumerator.new do |y|
195
+ (1..Float::INFINITY).each do |delta|
196
+ a = 0
197
+ (0..(k - 1)).each do |i|
198
+ a += Utils.binomial_coefficient(k - 1, i) * (Utils.rising_factorial(delta - i, k) / Utils.factorial_iter(k))
199
+ end
200
+ y << a
201
+ end
202
+ end
203
+ end
204
+
205
+ alias_method :k_cross_polytope, :k_dimensional_hyperoctahedron
206
+
207
+ def four_dimensional_mgonal_pyramidal(m)
208
+ Enumerator.new do |y|
209
+ (1..Float::INFINITY).each do |delta|
210
+ y << (delta * (delta + 1) * (delta + 2) * ((m - 2) * delta - m + 6)) / 24
211
+ end
212
+ end
213
+ end
214
+
215
+ alias_method :mgonal_pyramidal_numbers_of_the_second_order, :four_dimensional_mgonal_pyramidal
216
+
217
+ def four_dimensional_square_pyramidal
218
+ Enumerator.new do |y|
219
+ (1..Float::INFINITY).each do |delta|
220
+ y << (delta * (delta + 1) * (delta + 2) * ((4 - 2) * delta - 4 + 6)) / 24
221
+ end
222
+ end
223
+ end
224
+
225
+ def four_dimensional_pentagonal_pyramidal
226
+ Enumerator.new do |y|
227
+ (1..Float::INFINITY).each do |delta|
228
+ y << (delta * (delta + 1) * (delta + 2) * ((5 - 2) * delta - 5 + 6)) / 24
229
+ end
230
+ end
231
+ end
232
+
233
+ def four_dimensional_hexagonal_pyramidal
234
+ Enumerator.new do |y|
235
+ (1..Float::INFINITY).each do |delta|
236
+ y << (delta * (delta + 1) * (delta + 2) * ((6 - 2) * delta - 6 + 6)) / 24
237
+ end
238
+ end
239
+ end
240
+
241
+ def four_dimensional_heptagonal_pyramidal
242
+ Enumerator.new do |y|
243
+ (1..Float::INFINITY).each do |delta|
244
+ y << (delta * (delta + 1) * (delta + 2) * ((7 - 2) * delta - 7 + 6)) / 24
245
+ end
246
+ end
247
+ end
248
+
249
+ def four_dimensional_octagonal_pyramidal
250
+ Enumerator.new do |y|
251
+ (1..Float::INFINITY).each do |delta|
252
+ y << (delta * (delta + 1) * (delta + 2) * ((8 - 2) * delta - 8 + 6)) / 24
253
+ end
254
+ end
255
+ end
256
+
257
+ def four_dimensional_nonagonal_pyramidal
258
+ Enumerator.new do |y|
259
+ (1..Float::INFINITY).each do |delta|
260
+ y << (delta * (delta + 1) * (delta + 2) * ((9 - 2) * delta - 9 + 6)) / 24
261
+ end
262
+ end
263
+ end
264
+
265
+ def four_dimensional_decagonal_pyramidal
266
+ Enumerator.new do |y|
267
+ (1..Float::INFINITY).each do |delta|
268
+ y << (delta * (delta + 1) * (delta + 2) * ((10 - 2) * delta - 10 + 6)) / 24
269
+ end
270
+ end
271
+ end
272
+
273
+ def four_dimensional_hendecagonal_pyramidal
274
+ Enumerator.new do |y|
275
+ (1..Float::INFINITY).each do |delta|
276
+ y << (delta * (delta + 1) * (delta + 2) * ((11 - 2) * delta - 11 + 6)) / 24
277
+ end
278
+ end
279
+ end
280
+
281
+ def four_dimensional_dodecagonal_pyramidal
282
+ Enumerator.new do |y|
283
+ (1..Float::INFINITY).each do |delta|
284
+ y << (delta * (delta + 1) * (delta + 2) * ((12 - 2) * delta - 12 + 6)) / 24
285
+ end
286
+ end
287
+ end
288
+
289
+ def k_dimensional_mgonal_pyramidal(k, m)
290
+ Enumerator.new do |y|
291
+ (1..Float::INFINITY).each do |n|
292
+ y << (Utils.pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) / Utils.factorial_iter(k)
293
+ end
294
+ end
295
+ end
296
+
297
+ alias_method :mgonal_pyramidal_numbers_of_the_k_2_th_order, :k_dimensional_mgonal_pyramidal
298
+
299
+ def five_dimensional_mgonal_pyramidal(m)
300
+ Enumerator.new do |y|
301
+ (1..Float::INFINITY).each do |delta|
302
+ y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * ((m - 2) * delta - m + 7)) / 120
303
+ end
304
+ end
305
+ end
306
+
307
+ def five_dimensional_square_pyramidal
308
+ Enumerator.new do |y|
309
+ k = 5
310
+ m = 4
311
+ (1..Float::INFINITY).each do |delta|
312
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
313
+ end
314
+ end
315
+ end
316
+
317
+ def five_dimensional_pentagonal_pyramidal
318
+ Enumerator.new do |y|
319
+ k = 5
320
+ m = 5
321
+ (1..Float::INFINITY).each do |delta|
322
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
323
+ end
324
+ end
325
+ end
326
+
327
+ def five_dimensional_hexagonal_pyramidal
328
+ Enumerator.new do |y|
329
+ k = 5
330
+ m = 6
331
+ (1..Float::INFINITY).each do |delta|
332
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
333
+ end
334
+ end
335
+ end
336
+
337
+ def five_dimensional_heptagonal_pyramidal
338
+ Enumerator.new do |y|
339
+ k = 5
340
+ m = 7
341
+ (1..Float::INFINITY).each do |delta|
342
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
343
+ end
344
+ end
345
+ end
346
+
347
+ def five_dimensional_octagonal_pyramidal
348
+ Enumerator.new do |y|
349
+ k = 5
350
+ m = 8
351
+ (1..Float::INFINITY).each do |delta|
352
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
353
+ end
354
+ end
355
+ end
356
+
357
+ def six_dimensional_mgonal_pyramidal(m)
358
+ Enumerator.new do |y|
359
+ (1..Float::INFINITY).each do |delta|
360
+ y << (delta * (delta + 1) * (delta + 2) * (delta + 3) * (delta + 4) * ((m - 2) * delta - m + 8)) / 720
361
+ end
362
+ end
363
+ end
364
+
365
+ def six_dimensional_square_pyramidal
366
+ Enumerator.new do |y|
367
+ k = 6
368
+ m = 4
369
+ (1..Float::INFINITY).each do |delta|
370
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
371
+ end
372
+ end
373
+ end
374
+
375
+ def six_dimensional_pentagonal_pyramidal
376
+ Enumerator.new do |y|
377
+ k = 6
378
+ m = 5
379
+ (1..Float::INFINITY).each do |delta|
380
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
381
+ end
382
+ end
383
+ end
384
+
385
+ def six_dimensional_hexagonal_pyramidal
386
+ Enumerator.new do |y|
387
+ k = 6
388
+ m = 6
389
+ (1..Float::INFINITY).each do |delta|
390
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
391
+ end
392
+ end
393
+ end
394
+
395
+ def six_dimensional_heptagonal_pyramidal
396
+ Enumerator.new do |y|
397
+ k = 6
398
+ m = 7
399
+ (1..Float::INFINITY).each do |delta|
400
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
401
+ end
402
+ end
403
+ end
404
+
405
+ def six_dimensional_octagonal_pyramidal
406
+ Enumerator.new do |y|
407
+ k = 6
408
+ m = 8
409
+ (1..Float::INFINITY).each do |delta|
410
+ y << (Utils.pseudo_pochhammer_function(delta, k) * ((m - 2) * delta - m + k + 2)) / Utils.factorial_iter(k)
411
+ end
412
+ end
413
+ end
414
+
415
+ def centered_biquadratic
416
+ Enumerator.new do |y|
417
+ a = 0
418
+ (1..Float::INFINITY).each do |delta|
419
+ a += delta**4 - (delta - 2)**4
420
+ y << a + 1
421
+ end
422
+ end
423
+ end
424
+
425
+ def k_dimensional_centered_hypercube(k)
426
+ Enumerator.new do |y|
427
+ (1..Float::INFINITY).each do |delta|
428
+ y << delta**k + (delta - 1)**k
429
+ end
430
+ end
431
+ end
432
+
433
+ def five_dimensional_centered_hypercube
434
+ Enumerator.new do |y|
435
+ (1..Float::INFINITY).each do |delta|
436
+ y << delta**5 + (delta - 1)**5
437
+ end
438
+ end
439
+ end
440
+
441
+ def six_dimensional_centered_hypercube
442
+ Enumerator.new do |y|
443
+ (1..Float::INFINITY).each do |delta|
444
+ y << delta**6 + (delta - 1)**6
445
+ end
446
+ end
447
+ end
448
+
449
+ def centered_polytope
450
+ Enumerator.new do |y|
451
+ (1..Float::INFINITY).each do |delta|
452
+ y << (5 * delta**4 - 10 * delta**3 + 55 * delta**2 - 50 * delta + 24) / 24
453
+ end
454
+ end
455
+ end
456
+
457
+ def helper_centered_hypertetrahedron(k, n)
458
+ return 1 if n == 1
459
+ t = Utils.binomial_coefficient(k + 1, k)
460
+ return t if n == 2
461
+ tau = 0
462
+ (0..k-1).each do |i|
463
+ tau += Utils.binomial_coefficient(k + 1, k - i) * Utils.binomial_coefficient(n - 2, i)
464
+ end
465
+ tau
466
+ end
467
+
468
+ def acc_helper_centered_hypertetrahedron(k, n)
469
+ a = 0
470
+ (1..n).each do |j|
471
+ a += helper_centered_hypertetrahedron(k, j)
472
+ end
473
+ a
474
+ end
475
+
476
+ private_class_method :helper_centered_hypertetrahedron
477
+ private_class_method :acc_helper_centered_hypertetrahedron
478
+
479
+ def k_dimensional_centered_hypertetrahedron(k)
480
+ Enumerator.new do |y|
481
+ (1..Float::INFINITY).each do |n|
482
+ y << acc_helper_centered_hypertetrahedron(k, n)
483
+ end
484
+ end
485
+ end
486
+
487
+ def five_dimensional_centered_hypertetrahedron
488
+ Enumerator.new do |y|
489
+ (1..Float::INFINITY).each do |n|
490
+ y << acc_helper_centered_hypertetrahedron(5, n)
491
+ end
492
+ end
493
+ end
494
+
495
+ def six_dimensional_centered_hypertetrahedron
496
+ Enumerator.new do |y|
497
+ (1..Float::INFINITY).each do |n|
498
+ y << acc_helper_centered_hypertetrahedron(6, n)
499
+ end
500
+ end
501
+ end
502
+
503
+ def centered_hyperoctahedral
504
+ Enumerator.new do |y|
505
+ (1..Float::INFINITY).each do |delta|
506
+ y << (2 * delta**4 - 4 * delta**3 + 10 * delta**2 - 8 * delta + 3) / 3
507
+ end
508
+ end
509
+ end
510
+
511
+ alias_method :orthoplex, :centered_hyperoctahedral
512
+
513
+ def nexus(k)
514
+ Enumerator.new do |y|
515
+ (0..Float::INFINITY).each do |delta|
516
+ y << (delta + 1)**(k + 1) - delta**(k + 1)
517
+ end
518
+ end
519
+ end
520
+
521
+ def ext_int_double_summation(k, n)
522
+ t = ((2**(1)) * Utils.binomial_coefficient(k, 1) * Utils.binomial_coefficient(1, 0))
523
+ a = 0
524
+ (1..(n - 1)).each do |j|
525
+ (0..(k - 1)).each do |i|
526
+ a += (2**(1 + i)) * Utils.binomial_coefficient(k, 1 + i) * Utils.binomial_coefficient(j, i)
527
+ end
528
+ end
529
+ (1 + t + a)
530
+ end
531
+
532
+ private_class_method :ext_int_double_summation
533
+
534
+ def k_dimensional_centered_hyperoctahedron(k)
535
+ Enumerator.new do |y|
536
+ y << 1
537
+ (1..Float::INFINITY).each do |n|
538
+ y << ext_int_double_summation(k, n)
539
+ end
540
+ end
541
+ end
542
+
543
+ def five_dimensional_centered_hyperoctahedron
544
+ Enumerator.new do |y|
545
+ y << 1
546
+ (1..Float::INFINITY).each do |n|
547
+ y << ext_int_double_summation(5, n)
548
+ end
549
+ end
550
+ end
551
+
552
+ def six_dimensional_centered_hyperoctahedron
553
+ Enumerator.new do |y|
554
+ y << 1
555
+ (1..Float::INFINITY).each do |n|
556
+ y << ext_int_double_summation(6, n)
557
+ end
558
+ end
559
+ end
560
+
561
+ def generalized_pentatope(left_index = 0)
562
+ Enumerator.new do |y|
563
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
564
+ y << delta * (delta + 1) * (delta + 2) * (delta + 3) / 24
565
+ end
566
+ end
567
+ end
568
+
569
+ def generalized_k_dimensional_hypertetrahedron(k, left_index = 0)
570
+ Enumerator.new do |y|
571
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
572
+ y << Utils.rising_factorial(delta, k) / Utils.factorial_iter(k)
573
+ end
574
+ end
575
+ end
576
+
577
+ def generalized_biquadratic(left_index = 0)
578
+ Enumerator.new do |y|
579
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
580
+ y << delta**4
581
+ end
582
+ end
583
+ end
584
+
585
+ def generalized_k_dimensional_hypercube(k = 5, left_index = 0)
586
+ Enumerator.new do |y|
587
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
588
+ y << delta**k
589
+ end
590
+ end
591
+ end
592
+
593
+ def generalized_hyperoctahedral(left_index = 0)
594
+ Enumerator.new do |y|
595
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
596
+ y << (delta**2 * (delta**2 + 2)) / 3
597
+ end
598
+ end
599
+ end
600
+
601
+ def generalized_k_dimensional_hyperoctahedron(k = 5, left_index = 0)
602
+ Enumerator.new do |y|
603
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
604
+ a = 0
605
+ (0..(k - 1)).each do |i|
606
+ a += Utils.binomial_coefficient(k - 1, i) * (Utils.rising_factorial(delta - i, k) / Utils.factorial_iter(k))
607
+ end
608
+ y << a
609
+ end
610
+ end
611
+ end
612
+
613
+ def generalized_hyperdodecahedral(left_index = 0)
614
+ Enumerator.new do |y|
615
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
616
+ y << (delta * (261 * delta**3 - 504 * delta**2 + 283 * delta - 38)) / 2
617
+ end
618
+ end
619
+ end
620
+
621
+ def generalized_hypericosahedral(left_index = 0)
622
+ Enumerator.new do |y|
623
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
624
+ y << (delta * (145 * delta ** 3 - 280 * delta**2 + 179 * delta - 38)) / 6
625
+ end
626
+ end
627
+ end
628
+
629
+ def generalized_polyoctahedral(left_index = 0)
630
+ Enumerator.new do |y|
631
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
632
+ y << delta**2 * (3 * delta**2 - 4 * delta + 2)
633
+ end
634
+ end
635
+ end
636
+
637
+ def generalized_k_dimensional_mgonal_pyramidal(k, m, left_index = 0)
638
+ Enumerator.new do |y|
639
+ ((-1 * left_index.abs)..Float::INFINITY).each do |n|
640
+ y << (Utils.pseudo_pochhammer_function(n, k) * ((m - 2) * n - m + k + 2)) / Utils.factorial_iter(k)
641
+ end
642
+ end
643
+ end
644
+
645
+ def generalized_k_dimensional_centered_hypercube(k, left_index = 0)
646
+ Enumerator.new do |y|
647
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
648
+ y << delta**k + (delta - 1)**k
649
+ end
650
+ end
651
+ end
652
+
653
+ def gen_acc_helper_centered_hypertetrahedron(k, n)
654
+ a = 0
655
+ (1..n.abs).each do |j|
656
+ a += helper_centered_hypertetrahedron(k, j)
657
+ end
658
+ n > 0 ? a : -a
659
+ end
660
+
661
+ private_class_method :gen_acc_helper_centered_hypertetrahedron
662
+
663
+ def generalized_k_dimensional_centered_hypertetrahedron(k, left_index = 0)
664
+ Enumerator.new do |y|
665
+ ((-1 * left_index.abs)..Float::INFINITY).each do |n|
666
+ y << gen_acc_helper_centered_hypertetrahedron(k, n)
667
+ end
668
+ end
669
+ end
670
+
671
+ def gen_ext_int_double_summation(k, n)
672
+ is_positive_n = n
673
+ n = n.abs
674
+ t = ((2) * Utils.binomial_coefficient(k, 1) * Utils.binomial_coefficient(1, 0))
675
+ a = 0
676
+ (1..(n - 1)).each do |j|
677
+ (0..(k - 1)).each do |i|
678
+ a += (2**(1 + i)) * Utils.binomial_coefficient(k, 1 + i) * Utils.binomial_coefficient(j, i)
679
+ end
680
+ end
681
+ is_positive_n > 0 ? (1 + t + a) : (1 + t + a) * -1
682
+ end
683
+
684
+ private_class_method :gen_ext_int_double_summation
685
+
686
+ def generalized_k_dimensional_centered_hyperoctahedron(k, left_index = 0)
687
+ Enumerator.new do |y|
688
+ ((-1 * left_index.abs)..Float::INFINITY).each do |n|
689
+ y << 1 if n == 1
690
+ y << gen_ext_int_double_summation(k, n) if n != 0
691
+ end
692
+ end
693
+ end
694
+
695
+ def generalized_nexus(k, left_index = 0)
696
+ Enumerator.new do |y|
697
+ ((-1 * left_index.abs)..Float::INFINITY).each do |delta|
698
+ y << (delta + 1)**(k + 1) - delta**(k + 1)
699
+ end
700
+ end
701
+ end
702
+
703
+ require 'prime'
704
+
705
+ def cuban_numbers
706
+ Enumerator.new do |y|
707
+ (1..Float::INFINITY).each do |delta|
708
+ y << (delta + 1)**3 - delta**3
709
+ end
710
+ end
711
+ end
712
+
713
+ alias_method :cuban_prime_numbers, :cuban_numbers
714
+
715
+ def helper_quartan_numbers(delta)
716
+ seq = [2]
717
+ (1..delta).each do |x|
718
+ (x + 1..delta).each do |y|
719
+ q = x**4 + y**4
720
+ seq << q if Prime.prime?(q)
721
+ end
722
+ end
723
+ seq.sort
724
+ end
725
+
726
+ private_class_method :helper_quartan_numbers
727
+
728
+ def quartan_numbers
729
+ Enumerator.new do |y|
730
+ (1..Float::INFINITY).each do |delta|
731
+ y << helper_quartan_numbers(delta)[delta - 1]
732
+ end
733
+ end
734
+ end
735
+
736
+ def pell_numbers
737
+ pell_numbers = [0, 1]
738
+ Enumerator.new do |y|
739
+ y << 0
740
+ y << 1
741
+ (2..Float::INFINITY).each do |delta|
742
+ y << pell_numbers[delta] = 2 * pell_numbers[delta - 1] + pell_numbers[delta - 2]
743
+ end
744
+ end
745
+ end
746
+
747
+ def is_prime_number(p)
748
+ (2..Math.sqrt(p)).none? do |delta|
749
+ p % delta == 0
750
+ end
751
+ end
752
+
753
+ def helper_carmichael_number_math_def(n)
754
+ if !is_prime_number(n)
755
+ (2..(n - 1)).each do |a|
756
+ if n.gcd(a) == 1
757
+ if (a.pow(n - 1, n)) != 1
758
+ return nil
759
+ end
760
+ end
761
+ end
762
+ n
763
+ end
764
+ end
765
+
766
+ def helper_carmichael_number(n)
767
+ if !Prime.prime?(n)
768
+ (2..(Math.sqrt(n))).each do |a|
769
+ if (n).gcd(a) == 1
770
+ return if (a.pow(n - 1, n)) != 1
771
+ end
772
+ end
773
+ n
774
+ end
775
+ end
776
+
777
+ private_class_method :is_prime_number
778
+ private_class_method :helper_carmichael_number_math_def
779
+ private_class_method :helper_carmichael_number
780
+
781
+ def carmichael_numbers
782
+ Enumerator.new do |y|
783
+ (561..Float::INFINITY).each do |delta|
784
+ num_seq = helper_carmichael_number(delta)
785
+ if num_seq != nil
786
+ y << num_seq
787
+ end
788
+ end
789
+ end
790
+ end
791
+
792
+ def helper_stern_prime_numbers(delta)
793
+ prime_list = Prime.first(delta)
794
+ q = prime_list[-1]
795
+ b = 1
796
+ while (2 * b**2) < q
797
+ prime_list[0..-2].each do |p|
798
+ if q == p + (2 * b**2)
799
+ return nil
800
+ end
801
+ end
802
+ b += 1
803
+ end
804
+ q
805
+ end
806
+
807
+ private_class_method :helper_stern_prime_numbers
808
+
809
+ def stern_prime_numbers(infty = false)
810
+ Enumerator.new do |y|
811
+ max_term = infty == false ? 238 : float::INFINITY
812
+ (1..max_term).each do |delta|
813
+ num_seq = helper_stern_prime_numbers(delta)
814
+ if num_seq != nil
815
+ y << num_seq
816
+ end
817
+ end
818
+ end
819
+ end
820
+
821
+ def helper_apocalyptic_numbers(delta)
822
+ search_666 = (2**delta).to_s
823
+ len_666 = search_666.length - 1
824
+ (0..len_666).each do |index|
825
+ if search_666[index, 3] == '666' && search_666[index + 1] == '6' && search_666[index + 2] == '6'
826
+ return delta
827
+ end
828
+ end
829
+ nil
830
+ end
831
+
832
+ private_class_method :helper_apocalyptic_numbers
833
+
834
+ def apocalyptic_numbers
835
+ Enumerator.new do |y|
836
+ (157..Float::INFINITY).each do |delta|
837
+ y << helper_apocalyptic_numbers(delta) if helper_apocalyptic_numbers(delta) != nil
838
+ end
839
+ end
840
+ end
841
+
842
+ end