# Arithmetic and geometric progression in JavaScript

Arithmetic progression refers to a sequence of numbers in which the **difference** between any two successive members is a constant. Geometric progression refers to a sequence of numbers in which the **ratio** between any two successive members is a constant. Both can be easily implemented in JavaScript.

## Arithmetic progression

Given a positive integer `n`

and a positive limit `lim`

, the task is to create an array of numbers in the arithmetic progression, starting with the given positive integer and up to the specified limit.

In order to do so, you can use `Array.from()`

to create an array of the desired length, `lim / n`

. Then, use a map function as the second argument to fill it with the desired values in the given range.

const arithmeticProgression = (n, lim) => Array.from({ length: Math.ceil(lim / n) }, (_, i) => (i + 1) * n ); arithmeticProgression(5, 25); // [5, 10, 15, 20, 25]

## Geometric progression

Given a positive integer `end`

, and optional positive integers `start`

and `step`

, the task is to create an array of numbers in the geometric progression, starting with the given positive integer and up to the specified limit.

In order to do so, you can use `Array.from()`

, `Math.log()`

and `Math.floor()`

to create an array of the desired length. Then, use `Array.prototype.map()`

to fill it with the desired values in the given range. Omit the second argument, `start`

, to use a default value of `1`

. Omit the third argument, `step`

, to use a default value of `2`

.

const geometricProgression = (end, start = 1, step = 2) => Array.from({ length: Math.floor(Math.log(end / start) / Math.log(step)) + 1, }).map((_, i) => start * step ** i); geometricProgression(256); // [1, 2, 4, 8, 16, 32, 64, 128, 256] geometricProgression(256, 3); // [3, 6, 12, 24, 48, 96, 192] geometricProgression(256, 1, 4); // [1, 4, 16, 64, 256]