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