Partial Sums of Harmonic Series
Given an positive integer $n$, return an integer $k$ such that the $k$th partial sum of the harmonic series is greater than or equal to $n$. For example, if $n = 2$, then $k = 4$, because $1 + \frac{1}{2} + \frac{1}{3} + \frac{1}{4} = \frac{25}{12} > 2$.
More Input/Output Examples
Input -> Output
1 -> 1
3 -> 11
4 -> 31
This is code-golf, so shortest code wins.
[Python 3], 35 bytes …
2mo ago
AppleScript, 178 bytes ``` …
2mo ago
Japt, 11 bytes @§XõpJ x …
2mo ago
[Raku], 27 bytes {+ …
2mo ago
[JavaScript (Node.js)], 47 byt …
2mo ago
Stax, 9 bytes Ç≈f♠É↔X+ö …
2mo ago
6 answers
Raku, 27 bytes
{+([\+](1 X/1..*)...*>=$_)}
{ } # Anonymous code block
[\+]( ) # Get the partial sum of
1 X/ # 1 over each of
1..* # All positive integers
...*>=$_ # Take from the list until it is bigger than the input
+( ) # And return the length of the list
This will start to suffer precision issues, but you can add .FatRat
to work correctly (but much slower)
1 comment
+1 for FatRat (the link is broken)
JavaScript (Node.js), 47 bytes
f=(a,b=0,c=a=>a&&1/a+c(a-1))=>c(b)<a?f(a,b+1):b
For large numbers, a rounding error will occur and yield incorrect result. The solution below works for any integer (no rounding errors):
93 bytes
f=(a,i=0n,p=a=>g(a)/c(a),g=(a,b=a)=>a&&c(b)/a+g(~-a,b),c=a=>a?a*c(~-a):1n)=>p(i)<a?f(a,-~i):i
0 comments
Japt, 11 bytes
@§XõpJ x}aÄ
2 comments
Out of curiosity, I've seen this in a few of your other answers now (using shortcuts instead of one character alternatives) - why Ä
at the end instead of 1
?
Sometimes it's a hangover from a previous attempt at a solution, @Quintec, other times it's me trying to keep various tricks fresh in my mind and, occasionally, it's just to show off!
Python 3, 35 bytes
f=lambda x,i=1:x>0and-~f(x-1/i,i+1)
Subtracts each 1/i
in turn from the initial value until the result is no longer positive.
0 comments