-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathmysterious_sum-pentagonal_numbers.pl
executable file
·94 lines (75 loc) · 1.36 KB
/
mysterious_sum-pentagonal_numbers.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/perl
# Author: Daniel "Trizen" Șuteu
# Date: 14 August 2016
# License: GPLv3
# Website: https://github.com/trizen
# Mysterious sum-pentagonal numbers.
# A strange fact: at this very moment, as far as
# I searched, nothing is known about this numbers...
use 5.010;
use strict;
use warnings;
use Memoize qw(memoize);
memoize('sum_pentagonal');
sub p {
$_[0] * (3 * $_[0] - 1) / 2;
}
sub sum_pentagonal {
my ($n) = @_;
my $i = 1;
my $sum = 0;
while (1) {
my $p1 = p($i);
if ($n - $p1 == 0) {
return $sum + $n;
}
elsif ($n - $p1 < 0) {
last;
}
$sum += (-1)**($i - 1) * sum_pentagonal($n - $p1);
my $p2 = p(-$i);
if ($n - $p2 == 0) {
return $sum + $n;
}
elsif ($n - $p2 < 0) {
last;
}
$sum += (-1)**($i - 1) * sum_pentagonal($n - $p2);
++$i;
}
$sum;
}
foreach my $n (1 .. 100) {
say "s($n) = ", sum_pentagonal($n);
}
__END__
s(1) = 1
s(2) = 3
s(3) = 4
s(4) = 7
s(5) = 16
s(6) = 22
s(7) = 42
s(8) = 59
s(9) = 91
s(10) = 130
s(11) = 192
s(12) = 276
s(13) = 388
s(14) = 534
s(15) = 752
s(16) = 1011
s(17) = 1376
s(18) = 1833
s(19) = 2448
s(20) = 3216
s(21) = 4232
s(22) = 5514
s(23) = 7152
s(24) = 9206
s(25) = 11823
s(26) = 15094
s(27) = 19198
s(28) = 24282
s(29) = 30624
s(30) = 38450