# Partial Sums of Harmonic Series

Given an positive integer $n$, return the least positive 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.

Japt, 11 bytes @§XõpJ x …

5mo ago

[Python 3], 35 bytes …

5mo ago

[Raku], 27 bytes {+ …

5mo ago

[Scala], 55 bytes ( …

~1mo ago

AppleScript, 178 bytes ``` …

5mo ago

Stax, 9 bytes Ç≈f♠É↔X+ö …

5mo ago

[JavaScript (Node.js)], 47 byt …

5mo ago

## 7 answers

# 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!

# 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)

# 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

# Scala, 55 bytes

```
(Stream from 1 map 1.0./scanLeft.0)(_+_)indexWhere _.<=
```

Written in a more sane manner:

```
n => Stream.from(1).map(1.0/_).scanLeft(0.0)(_+_).indexWhere(_ >= n)
```

Explanation:

```
(
Stream from 1 //Make an infinite list of integers, starting at 1
map 1.0./ //Find the reciprocal of each (divide 1.0)
scanLeft .0)(_+_) //Sum each partial sequence
indexWhere //Find the index where
_.<= //n (underscore) is less than or equal to a partial sum
```

#### 0 comments

# 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