Предмет: Информатика, автор: noname6391

a(a-n)(a-2n)...(a-n^2)
(Программа Python)
Решите простым примером,не через пайтон
Помогите,пожалуйста!


MaxLevs: Так я не понял, тебе на python или нет?
noname6391: Это решается через пайтон,но мне не через него нужно,развязать циклическим алгоритмом
MaxLevs: Могу вместо Python, раз такое дело, написать на Haskell:
product $ fmap (x -> a - x*n) [0..n]
MaxLevs: \x
noname6391: Оу,извините,мы ещё такое не учили(
MaxLevs: А ещё лучше, как функцию: func a n = product $ fmap (\k -> a - k*n) [0..n]
noname6391: Как вам удобнее :)

Ответы

Автор ответа: MaxLevs
2

На входе у тебя два аргумента: a и n. На выходе некое произведение, множители которого вычисляются из вышеуказанных аргументов.

Для нахождения произведения необходимо найти множитель в общем виде. Наше выражение a*(a-n)*(a-2n)*...*(a-n^2). Это можно представить как (a-0*n)*(a-1*n)*(a-2*n)*...*(a-n*n). Отсюда очевидно, что множитель имеет вид (a-k*n), где a и n – какие-то константы, а k – переменная, принимающая в качестве значений целые числа в диапазоне от 0 до n (иначе говоря, k выводится из n).

Таким образом, мы можем вычислить это произведение для любых произвольных значений a и n. Для этого создадим переменную, в которой будем хранить промежуточные и конечный результаты произведения, которую назовём res и которая изначально равна 1 (1 – нейтральный элемент над операцией умножения над целыми числами и не влияет на результат). Значения a и n нам известны и передаются на вход программе, а значения k мы будем перебирать в цикле.

Реализуем вышесказанное на Python.

  • a = int(input("a = "))
  • n = int(input("n = "))
  • res = 1
  • for k in range(n+1):
  •    res *= a - k*n
  • print("res = %d" % res)

P.S. Python позволят делать более лаконичные решения

  • from functools import reduce
  • from operator import mul
  • a = int(input("a = "))
  • n = int(input("n = "))
  • print("res = %d" % reduce(mul, map(lambda k: (a-k*n), range(n+1)), 1))

noname6391: Спасибо вам огромное!!Очень помогли!!!
noname6391: Вы всё так идеально объяснили,очень вам благодарна!
Похожие вопросы
Предмет: Немецкий язык, автор: Good17893