PROG0335 - Harmonic numbers

The $n$-th harmonic number is the sum $$\sum_{i=1}^{n}\frac{1}{i}$$

For smaller values of $n$ it is simple to just calculate this sum. However, if $n$ if very large, it can take up a lot of time. For larger values of $n$, it is better to use an approach that is easy to calculate. You can approach the harmonic numbers using the formula below: $$\ln(n) + \gamma + \frac{1}{2n} - \frac{1}{12n^2} + \frac{1}{120n^4}$$

Here, $\ln$ is the natural logarithm. The $\gamma$ in the formula is the Euler-Mascheroni constant (not to be mistaken with the Euler number that is represented by $e$) and is about equal to 0.577215664901532.

De rode lijn toont de harmonische getallen
The red line shows the harmonic numbers.

Assignment

  • Write a function harmonicExact that exactly calculates the $n$-th harmonic number. The function takes one argument: $n$.
  • Write a function harmonicApproach that makes an approached calculation of the $n$th harmonic number. The function takes one argument: $n$.
  • Write a function harmonic that exactly calculates the $n$-th harmonic number if $n$ is smaller than 100 and that makes a rough calculation for other values. The function takes one argument: $n$. Avoid unnecessary duplication of code.

Example

>>> harmonicExact(10)
2.9289682539682538

>>> harmonicApproach(10)
2.9289682578955776

>>> harmonic(10)
2.9289682539682538

Het $n$-de harmonische getal is de som $$\sum_{i=1}^{n}\frac{1}{i}$$

Voor kleine waarden van $n$ is het eenvoudig om deze som te gewoon berekenen. Als $n$ echter zeer groot wordt, dan kan dit heel wat tijd in beslag nemen. Voor grote waarden van $n$ gebruik je dus beter een benadering die eenvoudig te berekenen is. De harmonische getallen kan je benaderen met onderstaande formule: $$\ln(n) + \gamma + \frac{1}{2n} - \frac{1}{12n^2} + \frac{1}{120n^4}$$

Hierbij staat $\ln$ voor de natuurlijke logaritme. De $\gamma$ uit de formule is de constante van Euler-Mascheroni (niet te verwarren met het getal van Euler dat voorgesteld wordt door $e$) en is ongeveer gelijk aan 0.577215664901532.

De rode lijn toont de harmonische getallen
De rode lijn toont de harmonische getallen.

Opgave

  • Schrijf een functie harmonischExact die het $n$-de harmonische getal exact berekent. De functie neemt één argument: $n$.
  • Schrijf een functie harmonischBenaderd die het $n$-de harmonische getal benaderd berekent. De functie neemt één argument: $n$.
  • Schrijf een functie harmonisch die het $n$de harmonische getal berekent door de exacte manier te gebruiken als $n$ kleiner is dan 100 en de benadering voor andere waarden. De functie neemt één argument: $n$. Vermijd overbodige duplicatie van code.

Voorbeeld

>>> harmonischExact(10)
2.9289682539682538

>>> harmonischBenaderd(10)
2.9289682578955776

>>> harmonisch(10)
2.9289682539682538

Added by:Peter Dawyndt
Date:2013-02-19
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.