Submit | All submissions | Best solutions | Back to list |
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.
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.
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 |