Sylvester's sequence: Difference between revisions

From Rosetta Code
Content added Content deleted
(New draft task and Raku entry)
 
(Add Haskell)
Line 22: Line 22:
;* [[Harmonic series]]
;* [[Harmonic series]]
<br/>
<br/>

=={{header|Haskell}}==
<lang haskell>sylvester :: [Integer]
sylvester = map s [0..]
where s 0 = 2
s n = product (map s [0..n-1]) + 1

main :: IO ()
main = do
putStrLn "First 10 elements of Sylvester's sequence:"
putStr $ unlines $ map show $ take 10 sylvester
putStr "Sum of reciprocals: "
putStrLn $ show $ sum $ map ((1/) . fromInteger) $ take 10 sylvester</lang>
{{out}}
<pre>First 10 elements of Sylvester's sequence:
2
3
7
43
1807
3263443
10650056950807
113423713055421844361000443
12864938683278671740537145998360961546653259485195807
165506647324519964198468195444439180017513152706377497841851388766535868639572406808911988131737645185443
Sum of reciprocals: 0.9999999999999999</pre>


=={{header|Raku}}==
=={{header|Raku}}==

Revision as of 19:21, 30 May 2021

Sylvester's sequence is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
This page uses content from Wikipedia. The original article was at Sylvester's sequence. The list of authors can be seen in the page history. As with Rosetta Code, the text of Wikipedia is available under the GNU FDL. (See links for details on variance)


In number theory, Sylvester's sequence is an integer sequence in which each term of the sequence is the product of the previous terms, plus one.

Its values grow doubly exponentially, and the sum of its reciprocals forms a series of unit fractions that converges to 1 more rapidly than any other series of unit fractions with the same number of terms. Further, the sum of the first k terms of the infinite series of reciprocals provides the closest possible underestimate of 1 by any k-term Egyptian fraction.


Task
  • Write a routine (function, procedure, generator, whatever) to calculate Sylvester's sequence.
  • Use that routine to show the values of the first 10 elements in the sequence.
  • Show the sum of the reciprocals of the first 10 elements on the sequence;


See also


Haskell

<lang haskell>sylvester :: [Integer] sylvester = map s [0..]

   where s 0 = 2
         s n = product (map s [0..n-1]) + 1

main :: IO () main = do

   putStrLn "First 10 elements of Sylvester's sequence:"
   putStr $ unlines $ map show $ take 10 sylvester
   
   putStr "Sum of reciprocals: "
   putStrLn $ show $ sum $ map ((1/) . fromInteger) $ take 10 sylvester</lang>
Output:
First 10 elements of Sylvester's sequence:
2
3
7
43
1807
3263443
10650056950807
113423713055421844361000443
12864938683278671740537145998360961546653259485195807
165506647324519964198468195444439180017513152706377497841851388766535868639572406808911988131737645185443
Sum of reciprocals: 0.9999999999999999

Raku

<lang perl6>my @S = {1 + [*] @S[^($++)]} … *;

put 'First 10 elements of Sylvester\'s sequence: ', @S[^10];

say "\nSum of the reciprocals of first 10 elements: ", sum @S[^10].map: { FatRat.new: 1, $_ };</lang>

Output:
First 10 elements of Sylvester's sequence: 2 3 7 43 1807 3263443 10650056950807 113423713055421844361000443 12864938683278671740537145998360961546653259485195807 165506647324519964198468195444439180017513152706377497841851388766535868639572406808911988131737645185443

Sum of the reciprocals of first 10 elements: 0.9999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999635