-
Notifications
You must be signed in to change notification settings - Fork 34
/
Copy pathroots_on_the_rise.pl
executable file
·76 lines (57 loc) · 2.11 KB
/
roots_on_the_rise.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
#!/usr/bin/perl
# Daniel "Trizen" Șuteu
# Date: 21 February 2018
# https://github.com/trizen
# Solutions to x for:
# 1/x = (k/x)^2 * (k + x^2) - k*x
# See also:
# https://projecteuler.net/problem=479
use 5.020;
use strict;
use warnings;
use experimental qw(signatures);
use Math::AnyNum qw(:overload);
#use Math::GComplex qw(:overload);
sub roots ($k) {
# Formulas from Wolfram|Alpha
# https://www.wolframalpha.com/input/?i=1%2Fx+%3D+(k%2Fx)%5E2+*+(k%2Bx%5E2)++-+k*x
#<<<
my $x1 = (2*$k**6 + 27 * $k**5 - 9*$k**3 + 3 * sqrt(3) * sqrt(4 * $k**11 + 27 * $k**10 -
18*$k**8 - $k**6 + 4 *$k**3))**(1/3)/(3 * 2**(1/3) * $k) - (2**(1/3) * (3 * $k - $k**4)
)/(3 * (2* $k**6 + 27 * $k**5 - 9 * $k**3 + 3*sqrt(3) * sqrt(4*$k**11 + 27*$k**10 - 18 *
$k**8 - $k**6 + 4 *$k**3))**(1/3) *$k) + $k/3;
my $x2 = -((1 - i * sqrt(3)) * (2 * $k**6 + 27 *$k**5 - 9 * $k**3 + 3 * sqrt(3) * sqrt(4 *
$k**11 + 27* $k**10 - 18* $k**8 - $k**6 + 4 * $k**3))**(1/3))/(6 * 2**(1/3) * $k) +
((1 + i * sqrt(3)) * (3 * $k - $k**4))/(3 * 2**(2/3) * (2 * $k**6 + 27 * $k**5 - 9 *
$k**3 + 3 * sqrt(3) * sqrt(4 * $k**11 + 27 * $k**10 - 18 * $k**8 - $k**6 + 4 * $k**3)
)**(1/3) * $k) + $k/3;
my $x3 = -((1 + i * sqrt(3)) * (2*$k**6 + 27 * $k**5 - 9 * $k**3 + 3 * sqrt(3) * sqrt(4 *
$k**11 + 27 * $k**10 - 18 * $k**8 - $k**6 + 4 * $k**3))**(1/3))/(6 * 2**(1/3) * $k) +
((1 - i * sqrt(3)) * (3 * $k - $k**4))/(3 * 2**(2/3) * (2 *$k**6 + 27 * $k**5 - 9 * $k**3 +
3 * sqrt(3) * sqrt(4 *$k**11 + 27 * $k**10 - 18 *$k**8 - $k**6 + 4 * $k**3))**(1/3) * $k) + $k/3;
#>>>
return ($x1, $x2, $x3);
}
sub S ($n) {
my $sum = 0;
foreach my $k (1 .. $n) {
my ($x1, $x2, $x3) = roots($k);
foreach my $p (1 .. $n) {
my $t = ($x1 + $x2)**$p * ($x2 + $x3)**$p * ($x3 + $x1)**$p;
say "$k -> $t";
$sum += $t;
}
say '';
}
return $sum;
}
sub S_int ($n) {
my $sum = 0;
foreach my $k (1 .. $n - 1) {
my $p = ($k + 1)**2 - 1;
$sum += ($p * ((-1)**$n * $p**$n - 1)) / ($p + 1);
}
return $sum;
}
say S(4);
say S_int(4);