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.
- checksums.yaml +4 -4
- data/README.md +54 -395
- data/lib/figurate_numbers/multidimensional_figurate_numbers.rb +831 -0
- data/lib/figurate_numbers/p_adic_utils/p_adic_utils.rb +27 -0
- data/lib/figurate_numbers/plane_figurate_numbers.rb +653 -0
- data/lib/figurate_numbers/space_figurate_numbers.rb +712 -0
- data/lib/figurate_numbers/utils/utils.rb +38 -0
- data/lib/figurate_numbers/version.rb +5 -0
- data/lib/figurate_numbers.rb +11 -2229
- metadata +10 -7
data/lib/figurate_numbers.rb
CHANGED
@@ -1,2232 +1,14 @@
|
|
1
|
-
|
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
|
5
|
-
|
6
|
-
|
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
|