Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[euler] further whitespace, formatting cleanups
  • Loading branch information
Paul Cochrane committed May 19, 2015
1 parent 34504cc commit ed9570f
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 39 deletions.
30 changes: 15 additions & 15 deletions categories/euler/prob065-andreoss.pl
@@ -1,4 +1,3 @@
#!/usr/bin/env perl6
use v6;

=begin pod
Expand All @@ -9,8 +8,6 @@
L<https://projecteuler.net/problem=65>
The square root of 2 can be written as an infinite continued fraction.
√2 = 1 + 1
Expand All @@ -23,24 +20,25 @@
______
2 + ...
The infinite continued fraction can be written, √2 = [1;(2)], (2) indicates that
2 repeats ad infinitum. In a similar way, √23 = [4;(1,3,1,8)].
The infinite continued fraction can be written, √2 = [1;(2)], (2) indicates
that 2 repeats ad infinitum. In a similar way, √23 = [4;(1,3,1,8)].
It turns out that the sequence of partial values of continued fractions for
square roots provide the best rational approximations. Let us consider the
convergents for √2.
It turns out that the sequence of partial values of continued fractions for square
roots provide the best rational approximations. Let us consider the convergents for √2.
1 + 1
___ = 3/2
2
2
1 + 1
_________ = 7/5
2 + 1 / 2
....
Hence the sequence of the first ten convergents for √2 are:
1, 3/2, 7/5, 17/12, 41/29, 99/70, 239/169, 577/408, 1393/985, 3363/2378, ...
Hence the sequence of the first ten convergents for √2 are: 1, 3/2, 7/5,
17/12, 41/29, 99/70, 239/169, 577/408, 1393/985, 3363/2378, ...
What is most surprising is that the important mathematical constant,
e = [2; 1,2,1, 1,4,1, 1,6,1 , ... , 1,2k,1, ...].
Expand All @@ -50,12 +48,12 @@
The sum of digits in the numerator of the 10th convergent is 1+4+5+7=17.
Find the sum of digits in the numerator of the 100th convergent of the continued fraction for e.
Find the sum of digits in the numerator of the 100th convergent of the
continued fraction for e.
Expected result: 272
=end pod
=end pod

sub continued-fraction(@sequence, :$depth) {
my $x = @sequence.shift;
Expand All @@ -67,3 +65,5 @@
my @e := gather { take 2; take (1; $_; 1) for 2,4 ... * };

say [+] continued-fraction(@e, depth => 100).numerator.comb;

# vim: expandtab shiftwidth=4 ft=perl6
28 changes: 16 additions & 12 deletions categories/euler/prob066-andreoss.pl
@@ -1,4 +1,3 @@
#!/usr/bin/perl6
use v6;

=begin pod
Expand All @@ -7,28 +6,31 @@
=AUTHOR Andrei Osipov
L<https://projecteuler.net/problem=66>
L<https://projecteuler.net/problem=66>
Consider quadratic Diophantine equations of the form:
x² – D×y² = 1
For example, when D=13, the minimal solution in x is 649² – 13×180² = 1.
It can be assumed that there are no solutions in positive integers when D is square.
It can be assumed that there are no solutions in positive integers when D is
square.
By finding minimal solutions in x for D = {2, 3, 5, 6, 7}, we obtain the following:
By finding minimal solutions in x for D = {2, 3, 5, 6, 7}, we obtain the
following:
3²– 2×2²= 1
2²– 3×1²= 1
9²– 5×4²= 1
5²– 6×2²= 1
8²– 7×3²= 1
Hence, by considering minimal solutions in x for D ≤ 7, the largest x is obtained when D=5.
Find the value of D ≤ 1000 in minimal solutions of x for which the largest value of x is obtained.
Hence, by considering minimal solutions in x for D ≤ 7, the largest x is
obtained when D=5.
Find the value of D ≤ 1000 in minimal solutions of x for which the largest
value of x is obtained.
Expected result: 661
Expand All @@ -37,7 +39,7 @@
=end pod

subset NonSquarable where *.sqrt !%% 1;
subset NonSquarable where *.sqrt !%% 1;

sub next-triplet([\a,\b,\k], \N) {

Expand All @@ -59,18 +61,18 @@
my $a = N.sqrt.floor;
my $b = 1;
my $k = $a ** 2 - N;

$a, $b, $k;
}

sub chakravala(NonSquarable \N) {
# Start with a solution for a² - N b² = k
# Start with a solution for a² - N b² = k

my ($a, $b, $k) = simple-solution N;

($a,$b,$k) = next-triplet [$a,$b,$k], N
while $k != 1;

$a, $b, $k;
}

Expand All @@ -81,3 +83,5 @@ (NonSquarable \N)
==> sort *[2] ==> my @x;

say @x.pop[0];

# vim: expandtab shiftwidth=4 ft=perl6
25 changes: 13 additions & 12 deletions categories/euler/prob080-andreoss.pl
Expand Up @@ -6,21 +6,23 @@
=AUTHOR Andrei Osipov
L<https://projecteuler.net/problem=80>
L<https://projecteuler.net/problem=80>
It is well known that if the square root of a natural number is not an integer, then it is irrational.
The decimal expansion of such square roots is infinite without any repeating pattern at all.
The square root of two is 1.41421356237309504880..., and the digital sum of the first one
hundred decimal digits is 475.
It is well known that if the square root of a natural number is not an
integer, then it is irrational. The decimal expansion of such square roots
is infinite without any repeating pattern at all. The square root of two is
1.41421356237309504880..., and the digital sum of the first one hundred
decimal digits is 475.
For the first one hundred natural numbers, find the total of the digital sums of the first
one hundred decimal digits for all the irrational square roots.
For the first one hundred natural numbers, find the total of the digital
sums of the first one hundred decimal digits for all the irrational square
roots.
The following algoritm was used for the solution:
L<http://www.afjarvis.staff.shef.ac.uk/maths/jarvisspec02.pdf>
Expected result: 40886
=end pod

use v6;
Expand All @@ -39,7 +41,7 @@
}
when Less {
# add two zeros to a
$a *= 100;
$a *= 100;
# add a zero to b just before the final digit (which will always be ‘5’).
$b = ($b - (my $x = $b % 10)) * 10 + $x;
}
Expand All @@ -50,13 +52,12 @@

sub MAIN(Bool :$verbose = False) {
say [+] do for 1 ... 100 -> $n {
next if $n.sqrt.floor ** 2 == $n;
next if $n.sqrt.floor ** 2 == $n;
my $x = [+] $n.&sqrt-subtraction.comb[^$limit];
say "$n $x" if $verbose;
$x;
}
say "Done in {now - INIT now}" if $verbose;
}



# vim: expandtab shiftwidth=4 ft=perl6

0 comments on commit ed9570f

Please sign in to comment.