eulerList

by evgkch

JavaScript

const list = (from, count, step = 1) =>
	Array.from({ length: count }, (_, n) => from + n * step);

const NList = n => list(1, n);

const gcd = (a, b) => b === 0 ? a : gcd(b, a % b);

const eulerList = x => NList(x).filter(v => gcd(x, v) === 1);

const union = (listA, listB) => {
	const buffer = new Set(listA);
  listB.forEach(x => buffer.add(x));
  return Array.from(buffer);
}

const eulerStats = to => NList(to).map(eulerList).reduce(union);

console.log(eulerList(16).length)