freeCodeCamp/curriculum/challenges/russian/08-coding-interview-prep/project-euler/problem-478-mixtures.russia...

3.2 KiB
Raw Blame History

id challengeType title forumTopicId localeTitle
5900f54c1000cf542c51005e 5 Problem 478: Mixtures 302155 Задача 478: Смеси

Description

Рассмотрим смеси трех веществ: A, B и C. Смесь может быть описана отношением количеств A, B и C в ней, то есть (a: b: c). Например, смесь, описываемая соотношением (2: 3: 5), содержит 20% А, 30% В и 50% С.

Для целей этой проблемы мы не можем отделить отдельные компоненты от смеси. Однако мы можем комбинировать различные количества различных смесей с образованием смесей с новыми соотношениями.

Например, предположим, что у нас есть три смеси с соотношениями (3: 0: 2), (3: 6: 11) и (3: 3: 4). Путем смешивания 10 единиц первого, 20 единиц второго и 30 единиц третьего, мы получаем новую смесь с соотношением (6: 5: 9), так как: (10 · 3/5 + 20 · 3/20 + 30 · 3/10: 10 · 0/5 + 20 · 6/20 + 30 · 3/10: 10 · 2/5 + 20 · 11/20 + 30 · 4/10) = (18: 15: 27) = (6: 5: 9)

Однако с теми же тремя смесями невозможно сформировать соотношение (3: 2: 1), так как количество B всегда меньше количества C.

Пусть n - положительное целое число. Предположим, что для каждой тройки целых чисел (a, b, c) с 0 ≤ a, b, c ≤ n и gcd (a, b, c) = 1 мы имеем смесь с отношением (a: b: c). Пусть M (n) - множество всех таких смесей.

Например, M (2) содержит 19 смесей со следующими соотношениями: {(0: 0: 1), (0: 1: 0), (0: 1: 1), (0: 1: 2), ( 0: 2: 1), (1: 0: 0), (1: 0: 1), (1: 0: 2), (1: 1: 0), (1: 1: 1) 1: 2), (1: 2: 0), (1: 2: 1), (1: 2: 2), (2: 0: 1), (2: 1: 0), (2: 1: 1), (2: 1: 2), (2: 2: 1)}.

Пусть E (n) - число подмножеств M (n), которое может производить смесь с соотношением (1: 1: 1), т. Е. Смесь с равными частями A, B и C. Мы можем проверить, что E (1 ) = 103, E (2) = 520447, E (10) mod 118 = 82608406 и E (500) mod 118 = 13801403. Найдите E (10 000 000) мод 118.

Instructions

Tests

tests:
  - text: <code>euler478()</code> should return 59510340.
    testString: assert.strictEqual(euler478(), 59510340);

Challenge Seed

function euler478() {
  // Good luck!
  return true;
}

euler478();

Solution

// solution required