Враховуючи n
числа в масиві (ви не можете припустити, що вони є цілими числами), я хотів би обчислити добуток усіх підмножин розміру n-1
.
Це можна зробити, помноживши всі числа разом, а потім діливши їх по черзі, доки жодне з чисел не дорівнює нулю. Однак, як швидко ви можете зробити це без поділу?
Якщо ви не дозволяєте ділити, яка мінімальна кількість арифметичних операцій (наприклад, множення та додавання), необхідних для обчислення добутку всіх підмножин розміром n-1?
Зрозуміло, що ви можете це зробити у (n-1)*n
множенні.
Для уточнення, вихідні дані є n
різними продуктами, і єдиними операціями, окрім читання та запису в пам'ять, є дозволення - множення, додавання та віднімання.
Приклад
Якщо на вході є три числа 2,3,5
, то на виході є три числа 15 = 3*5
, 10 = 2*5
і 6 = 2*3
.
Критерій виграшу
У відповідях слід дати точну формулу для кількості арифметичних операцій, які їх використовуватиме з точки зору n
. Щоб зробити життя простим, я просто підключуся n = 1000
до вашої формули, щоб оцінити її бал. Чим нижче, тим краще.
Якщо складно створити точну формулу для вашого коду, ви можете просто запустити її n = 1000
і порахувати арифметичні операції в коді. Точна формула була б найкращою, однак.
Ви повинні додати свою оцінку n=1000
до своєї відповіді для легкого порівняння.
+
по індексах вважати? Якщо це так, чи враховується також індексація масиву? (оскільки це зрештою синтаксичний цукор для додавання та віднесення).
(n-1)*n
множенні. Ви маєте на увазі (n-2)*n
, правда?