Вычисление факториала числа. Расчет факториала


Вычисление факториала числа онлайн

Факториал натурального числа n — это произведение последовательных натуральных чисел от 1 до n. Факториалы естественным образом возникают во многих областях математики, а «родиной» факториала считается комбинаторика.

Основная информация

Сначала заметим, что математически факториал записывается при помощи восклицательного знака. Такая запись выглядит как n!, а читается как эн-факториал. Математический смысл факториала состоит в произведении последовательных натуральных чисел от 1 до n:

n! = 1 × 2 × 3 … (n − 2) × (n − 1) × n,

где n — заданное количество натуральных чисел.

Первые значения n! выглядят так:

  • 1! = 1
  • 2! = 2
  • 3! = 6
  • 4! = 24
  • 5! = 120

Факториал очень быстро растущая функция, если 5! эквивалентно 120, то 15! составляет уже 1 307 674 368 000, а 50! имеет в своем составе 64 нуля. Факториал возник в комбинаторике при расчете количества перестановок множества из n-ного количества элементов. К примеру, для трехэлементного множества Z = {A, B, C} существует 3! = 6 вариантов перестановок:

  • ABC;
  • ACB;
  • BAC;
  • BCA;
  • CAB;
  • CBA.

Теоретико-множественное обоснование смысла факториала позволило доказать парадоксальное на первый взгляд утверждение, что 0! = 1. Ноль-факториал, по сути, представляет собой 0 × 1, а каждый пятиклассник знает, что при умножении на ноль в результате также будет ноль. Пустое же множество, не содержащее элементов, может быть упорядоченно одним единственным способом, поэтому факториал нуля равен единице. В целом факториал находит широкое применение в теории чисел, теории вероятностей, функциональном анализе, комбинаторике, а также при разложении функций в ряд Тейлора.

Вычисление n!

Вычисление факториала для натуральных чисел меньше 10 не представляет особой сложности, однако молниеносный рост функции делает крайне затруднительным вычисление факториалов по мере роста чисел. В компьютерных вычислениях основной сложностью становится отображение и хранение результата расчета функции n!. Прямое умножение натуральных чисел для вычисления факториала для n > 20 не используется.

Формула Стирлинга

Формула Стирлинга позволяет вычислить приблизительное значение факториала любого числа n, оперируя при этом только числом n и постоянными коэффициентами. Данная формула позволяет избежать огромных промежуточных вычислений. Для точного вычисления значения формула Стирлинга содержит 7 слагаемых, однако в большинстве случаев эти слагаемые опускаются, а факториал рассчитывается приближенно:

n! ≈ sqrt(2pi × n ) × (n/e)n,

где e — экспонента.

Наш калькулятор рассчитывает факториал именно по формуле Стирлинга, поэтому для небольших чисел значение факториала будет выглядеть необычно. Например, 2! ≈ 1,919, а 3! ≈ 5,836. Не пугайтесь такого представления результата, просто округлите число до ближайшего целого в большую сторону и вы получите правильный ответ. Для больших чисел результат будет представлен в виде мантиссы и порядка. Например, 100! ≈ 9,325e+157. Это означает, что 100! ≈ 9,325 × 10157.

Другие виды факториалов

Помимо стандартного n! для ряда натуральных чисел существуют также экзотические виды факториала, которые рассчитываются для четных/нечетных или простых чисел. Последний называется праймориал и рассчитывается для последовательности простых чисел меньших или равных заданному. К примеру, праймориал первых 7 простых чисел представляет собой:

p7 = 2 × 3 × 5 × 7 × 11 × 13 × 17 = 510 510

Кроме того, существует суперфакториал, который представляет собой произведение первых n факториалов. Например, суперфакториал 5 равен:

sf(5) = 1! × 2! × 3! × 4! × 5! = 1 × 2 × 6 × 24 × 120 = 34 560

Очевидно, что последовательность суперфакториалов является самой быстрорастущей.

Наша программа использует формулу Стирлинга для вычисления сколь угодно больших факториалов. Для небольших чисел не забывайте округлять результат до целого в большую сторону, так как факториал — это всегда целое число.

Рассмотрим пример из комбинаторики

Лотерея

Всем известны различные лотереи, где игрокам требуется угадать комбинацию 6 чисел из 52 возможных. Правила могут отличаться, иногда требуется угадать 5 чисел из 60 или 6 из 90. Пусть вы купили билет классической лотереи «Спортлото» и для выигрыша вам требуется угадать комбинацию 6 чисел из 49 возможных. Какова вероятность выиграть главный приз? К нам на помощь приходит комбинаторика и факториалы. Общее количество возможных комбинаций для данного примера рассчитывается по формуле:

Общее количество 6 из 49 = 49! / (6! × 43!)

Воспользуемся калькулятором и по отдельности вычислим значения факториалов:

Общее количество 6 из 49 = 6,072e+62 / 720 × 6,030e+52 = 13 985 627.

Это означает, существует приблизительно 14 миллионов шестиэлементных комбинаций, образованных из 49 чисел. Следовательно, вероятность выигрыша в «Спортлото» составляет 1 к 14 миллионам.

Заключение

Факториалы естественным образом возникают в комбинаторике, теории чисел и теории вероятностей. Используйте нашу программу для подсчета приблизительных значений факториалов сколько угодно больших чисел.

bbf.ru

Онлайн калькулятор: Факториал

Факториал числа n (обозначается n!) — произведение всех натуральных чисел до n включительно:По определению полагают 0! = 1. Факториал определён только для целых неотрицательных чисел.

Поскольку в вычислениях иногда бывает довольно трудно перемножать все числа входящие в факториал, используется так называемая формула Стирлинга:приближенная формула для вычисления факториала.

Во многих случаях для упрощения рассматривают только главный член формулы

При этом утверждается, что

Калькулятор рассчитывает "честный" факториал, факториал по формуле Стирлинга, а также нижнюю и верхнюю границу (из неравенства). К сожалению, из-за ограниченных вычислительных способностей Javascript максимально возможный факториал для калькулятора — 170!

Точность вычисления

Знаков после запятой: 2

Граница снизу

 

Формула Стирлинга

 

Граница сверху

 

Сохранить share extension

planetcalc.ru

Калькулятор онлайн для расчета факториала числа

Факториал натурального числа n - произведение первых по счету,n натуральных чисел от 1 до n включительно, обозначается n!

n! = 1 • 2 • 3 • 4 • 5 • ... • n

Факториа́л числа – это число, умноженное на «себя минус один», затем на «себя минус два» и так далее, до единицы.

n! = n • (n - 1) • (n - 2) • ... • 1

Для приближённого вычисления факториала и гамма-функции используется формула Стирлинга . Названа в честь Джеймса Стирлинга и Абрахама де Муавра, последний считается автором формулы

Вычисление факториала числа (n!) по формуле в Стирлинга. Этот калькулятор может быть использован для вычисления значений n больше 100.

Расчет факториала по формуле Джеймса Стирлинга

Приближенное значение не ограничено по колличеству n

Расчет факториала от 0 до 100

Точное значение, ограниченное по колличеству n

Формула Джеймса Стирлинга для расчета факториала

n! ≈ √(2π) × n(n+1/2) × e -n

Примеры значений для разных n:

1! = 12! = 2 × 1 = 23! = 3 × 2 × 1 = 64! = 4 × 3 × 2 × 1 = 245! = 5 × 4 × 3 × 2 × 1 = 120

Не стоит забывать

По общепринятой договоренности 0! = 1 (факториал нуля равен единице). Этот факт важен, к примеру, для вычисления биномиальных коэффициентов.

Полезный факт

Факториал числа, функцию от натурального аргумента можно продолжить на все действительные числа с помощью т.н. Гамма-функции (важно отметить, что для этого требуется определенный математический аппарат). В таком случае, мы сможем посчитать факториал любого действительного числа. Например, факториал (или, Гамма-функция, что математически правильнее) числа Пи. π! приблизительно равен 2.28803779534. Факториал числа Эйлера, другого трансцендентного числа, Γ(e) ~ 1.567468255 (упрощенно, факториал числа e).

В вашем браузере отключен Javascript. Чтобы произвести расчеты, необходимо разрешить элементы ActiveX!

Поделитесь с другими:

Если материал понравился Вам и оказался для Вас полезным, поделитесь им со своими друзьями!

calcsbox.com

Вычисление факториала

Факториалом числа называют произведение всех натуральных чисел до него включительно. Например, факториал числа 5 равен произведению 1*2*3*4*5 = 120. Формулу нахождения факториала можно записать следующим образом: n! = 1 * 2 * … * n, где n – это число, а n! – факториал этого числа.

Можно записать немного по-другому: n! = 1 * … * (n-2) * (n-1) * n, т.е. каждое предыдущее число меньше на единицу, чем последующее. Нахождение факториала числа по первой формуле можно реализовать с помощью цикла while, а по второй формуле – с помощью рекурсии.

Исходный код на Python с использованием цикла

n = input("Факториал числа ") n = int(n) fac = 1 i = 0 while i < n: i += 1 fac = fac * i print ("равен", fac)

Предположим, что в переменная n была связана с числом 5. Т.е. надо найти 5!.

Первых проход по телу цикла while свяжет переменную fac с произведением 1 * 1. Второй - 1 * 2, затем 2 * 3, 6 * 4, 24 * 5. Шестой раз цикл while выполняться не будет, т.к. значение переменной i будет равно 5 и выражение i < n вернет false.

Вычисление факториала с помощью цикла for:

>>> fac = 1 >>> for i in range(1,6): ... fac *= i ... >>> fac 120

Исходный код на Python с использованием рекурсии

def fac(n): if n == 0: return 1 return fac(n-1) * n

0 шаг. Вызов функции: fac(5)1. fac(5) возвращает fac(4) * 52. fac(4) => fac(3) * 43. fac(3) => fac(2) * 34. fac(2) => fac(1) * 25. fac(1) => 16. 1 * 2 - возврат в вызов fac(2)7. 2 * 3 - fac(3)8. 6 * 4 - fac(4)9. 24 * 5 – fac(5)10. Возврат в основную ветку программы значения 120.

Функция factorial модуля math

Модуль math языка программирования Python содержит функцию factorial, принимающую в качестве аргумента неотрицательное целое число и возвращающую факториал этого числа:

>>> import math >>> math.factorial(4) 24

younglinux.info

Вычислить факториал

Начнем с определения: факториалом числа n называется произведение всех натуральных чисел от 1 до числа n включительно. Формула для вычисления факториала записывается так: $$n!=1\cdot 2\cdot 3\cdot ...\cdot n$$ Надо еще знать соглашение: 0!=1. Почему факториал нуля равен единице можно спорить до бесконечности. Часто приводится и Гамма функция для объяснений и выражение типа: n!=(n-1)!n, в которое подставляют n=1 и радостно доказывают потом, что: из выражения 1!=(1-1)!1 следует 1=0!. Но на самом деле, это последнее выражение только доказывает, что правильно таки математики договорились считать, что 0!=1 для того, чтобы не нарушались правила вычисления факториала и в формулах не появлялось противоречие. А больше нигде это равенство 0!=1 и не используется. Поэтому и можно было договориться, чтобы не морочить себе голову в будущем. Но не об этом сейчас речь. Нас будет интересовать способ, как быстро (в домашних условиях) и правильно вычислить факториал большого числа. Проблема в том, что для вычисления факториалов больших чисел часто не хватает или памяти или числа знаков, поддерживаемых или калькулятором или компьютером. Ведь результат получается огромным, если число большое. Посмотрите на картинку (кликабельно) - на ней результат вычисления значения 500!. Но, теперь проблема решена - вы можете вычислять факториал от огромных чисел. Зачем только вам это может понадобиться не очень понятно. Ну, например, чтобы удивить вашего учителя или получить оригинальную заставку для вашего телефона. Правда иногда, программистам предлагают такую задачку решить, чтобы они помучились. Теперь все просто - вводите в строку ваше число, набираете восклицательный знак и жмете кнопку "Решить". Пример ввода приведен ниже. 500! Важно. Чтобы получить все цифры огромного числа надо будет нажать надвпись More digits (больше цифр), если в конце выведенного числа есть троеточие. Нажимайте More digits до тех пор, пока троеточие в конце не исчезнет (для больших чисел несколько раз).

studlab.com

6.1.2. Вычисление факториала

Рассмотрим еще одно применение цикла For. Это задача вычисления факториала натурального числа.

Факториалом натурального числа nназывается произведение всех натуральных чисел от единицы доnвключительно.

Программная реализация этого процесса предполагает последовательное вычисление всех произведений. Сначала находится произведение 1 и 2. Полученный результат умножается на 3. Новый результат умножается на 4. И так далее до тех пор, пока не появится множитель n. Такой процесс называется вычисление произведения методом накопления. Рассмотрим программную реализацию этого алгоритма.

Исходные данные будем вводить с помощью функции InputBox. Для вывода результата будем использовать функциюMsgBox. Поэтому на экранной форме будет находиться только кнопка, запускающая программу.

Разработку программы начнем с описания переменных. Факториал числа является быстро растущей функцией. Поэтому для хранения результатов вычислений используют тип данных с максимальной емкостью. В Visual Basic 2005 это тип ULong. Он позволяет вычислять факториалы первых 20 чисел.

Dim f As ULong

Также нам потребуются две целых переменных: n– для хранения числа, факториала которого необходимо вычислить,i – для организации цикла. Так как значения этих переменных не будут превышать 20, то для них будем использовать типByte.

Dim i, n As Byte

Просим пользователя ввести число, факториал которого необходимо вычислить. Как всегда при вводе чисел используем преобразование Val.

n = Val(InputBox("введите натуральное число n"))

Начальное значение факториала полагаем равным единице, так как 1! = 1.

f = 1

Организуем цикл для вычисления факториала. Сомножители будут изменяться от 2 до n, что отображено в заголовке цикла.

For i = 2 To n

На каждом шаге цикла очередной сомножитель будет совпадать со значением счетчика i. Поэтому умножаем значение переменнойfнаi, а результат записываем обратно в переменнуюfвместо старого значения.

f *= i

Next

После окончания цикла выводим полученные результаты. Знак плюс используется для соединения частей строки. Сначала выводим значение переменной n. Так какn– это число, то для его вывода необходимо использовать преобразованиеStr. Затем выводим знаки факториала и равенства. Наконец печатаем значение переменнойf. Это и есть вычисленный факториал. Так как факториал – это число, то для его вывода используем преобразованиеStr.

MsgBox(Str(n) + "! =" + Str(f))

Полный текст рассмотренной программы приведен в приложении 13.

6.1.3. Обработка совокупности чисел с известным числом элементов

Совокупностью будем называть произвольный набор чисел, которые последовательно вводятся с клавиатуры. Совокупности чисел бывают двух видов: с известным числом элементов и с неизвестным числом элементов. В первом случае сначала указывается количество чисел, входящих в совокупность, а затем вводятся сами числа. Для работы с такими совокупностями используется цикл For. При обработке совокупности с неизвестным числом элементов количество ее элементов заранее неизвестно. Ввод продолжается до тех пор, пока не выполнится некоторое условие. Такая совокупность обрабатывается при помощи цикла с условием (см. раздел 6.2.2).

Рассмотрим основные приемы для обработки совокупности с известным количеством элементов. Основное правило при решении задач этого типа можно сформулировать следующим образом.

Совокупность всегда обрабатывается в пределах одного цикла.

Для ввода всех исходных данных будем использовать функцию InputBox. Так как все вводимые величины являются числами, то при вводе необходимо использовать преобразованиеVal. Элементы совокупности будем выводить в окно списка. Дадим ему имяlstA. Вывод организуем в две колонки. В первой колонке будем печатать порядковый номер элемента, а во второй – значение элемента. В это же окно списка будем выводить результаты вычислений. Для каждого рассматриваемого приема обработки совокупности чисел с известным количеством элементов поместим на форму отдельную кнопку. Внешний вид разработанной экранной формы приведен на рис. 27.

Рис. 27.Экранная форма программы обработки совокупности чисел с известным числом элементов

Рассмотрим основные приемы обработки совокупности с известным числом элементов. Полные тексты всех рассматриваемых программ приведены в приложении 14.

Вычисление суммы чисел.

Сумма элементов совокупности вычисляется методом накопления. Для этого заводится отдельная переменная, в которой постепенно будет накапливаться нужная сумма. Начальное значение суммы задается перед основным циклом. До начала вычислений сумма равна нулю. На каждом шаге цикла к уже накопленной сумме прибавляется значение очередного элемента совокупности. Тогда после завершения основного цикла в этой переменной будет храниться сумма всех элементов совокупности.

Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

  • a– для хранения очередного элемента совокупности;

  • i– номер обрабатываемого элемента;

  • n– количество элементов совокупности.

Dim a, i, n As Integer

В переменной summaбудет накапливаться результат.

Dim summa As Integer

Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

n = Val(InputBox("Введите количество элементов"))

Задаем начальное значение переменной summa.

summa = 0

Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит nэлементов, то номера этих элементов будут меняться в диапазоне от 1 доn. Поэтому начальное значение счетчикаi(номера элемента) равно 1, а конечное –n.

For i = 1 To n

Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

a = Val(InputBox("Введите элемент совокупности"))

В окно списка выводим номер элемента совокупности (i) и его значение (a). КонстантаvbTabиспользуется для организации вывода в две колонки.

lstA.Items.Add(Str(i) + vbTab + Str(a))

Добавляем значение элемента совокупности к переменной summa, накапливая в ней таким образом сумму всех элементов.

summa += a

Next

После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

lstA.Items.Add("-----------------------------------")

Затем печатаем накопленное значение суммы.

lstA.Items.Add("Сумма чисел =" + Str(summa))

Вычисление произведения чисел.

Произведение элементов также вычисляется накоплением. Но в отличие от суммы начальное значение произведения равно 1. Обратите внимание, если начальное значение произведения задать равным нулю, то получение результата станет невозможным. Начальное значение, так же как и в предыдущем случае, задается перед основным циклом. В цикле значение произведения умножается на очередной элемент совокупности. Тогда по завершении основного цикла мы получим искомое произведение всех элементов совокупности.

Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

  • a– для хранения очередного элемента совокупности;

  • i– номер обрабатываемого элемента;

  • n– количество элементов совокупности.

Dim a, i, n As Integer

В переменной proizбудет накапливаться результат.

Dim proiz As Integer

Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

n = Val(InputBox("Введите количество элементов"))

Задаем начальное значение произведения.

proiz = 1

Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит nэлементов, то номера этих элементов будут меняться в диапазоне от 1 доn. Поэтому начальное значение счетчикаi(номера элемента) равно 1, а конечное –n.

For i = 1 To n

Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

a = Val(InputBox("Введите элемент совокупности"))

В окно списка выводим номер элемента совокупности (i) и его значение (a). КонстантаvbTabиспользуется для организации вывода в две колонки.

lstA.Items.Add(Str(i) + vbTab + Str(a))

Умножаем ранее накопленное произведение на очередной элемент совокупности, формируя таким образом искомый результат.

proiz *= a

Next

После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

lstA.Items.Add("-----------------------------------")

Выводим вычисленное произведение.

lstA.Items.Add("Произведение чисел =" + Str(proiz))

Определение количества четных чисел в совокупности.

Определение количества чисел во многом похоже на вычисление суммы, с той лишь разницей, что к результирующей переменной прибавляется единица, а не очередной элемент совокупности. Перед началом основного цикла количество нужных элементов полагается равным нулю. После ввода каждого элемента совокупности проводится анализ, соответствует ли данный элемент поставленному условию (например, является ли оно четным). Если значение элемента удовлетворяет условию, то искомое количество увеличивается на единицу.

Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

  • a– для хранения очередного элемента совокупности;

  • i– номер обрабатываемого элемента;

  • n– количество элементов совокупности.

Dim a, i, n As Integer

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

Dim kol As Integer

Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

n = Val(InputBox("Введите количество элементов"))

До начала основного цикла количество элементов полагаем равным нулю, так как в нашей совокупности пока нет ни одного четного числа.

kol = 0

Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит nэлементов, то номера этих элементов будут меняться в диапазоне от 1 доn. Поэтому начальное значение счетчикаi(номера элемента) равно 1, а конечное –n.

For i = 1 To n

Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

a = Val(InputBox("Введите элемент совокупности"))

В окно списка выводим номер элемента совокупности (i) и его значение (a). КонстантаvbTabиспользуется для организации вывода в две колонки.

lstA.Items.Add(Str(i) + vbTab + Str(a))

Анализируем значение введенного элемента совокупности, проверяя, является ли оно четным. Если значение переменной aчетное, то остаток от его деления на два будет равен нулю. Для нечетных чисел остаток от деления на два отличен от нуля. Он равен 1 для положительных чисел и -1 для отрицательных чисел.

If a Mod 2 = 0 Then

Если текущий элемент совокупности четный, то количество четных чисел необходимо увеличить на единицу. Новое значение будет записано в ту же переменную kolвместо старого значения.

kol += 1

End If

Next

После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

lstA.Items.Add("-----------------------------------")

Перед выводом найденного значения необходимо провести его анализ.

If kol = 0 Then

Если количество элементов равно нулю, значит, в совокупности нет четных чисел. В этом случае выводим поясняющее сообщение.

lstA.Items.Add("В совокупности нет четных чисел") Else

В противном случае выводим найденное значение.

lstA.Items.Add("Количество четных чисел =" + _

Str(kol))

End If

Вычисление среднего арифметического положительных чисел в совокупности.

Среднее арифметическое элементов совокупности, удовлетворяющих некоторому условию (например, положительных) определяется как отношение суммы необходимых элементов к их количеству. Поэтому задача вычисления среднего арифметического решается как комбинация задач вычисления суммы и количества нужных элементов совокупности.

Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

  • a– для хранения очередного элемента совокупности;

  • i– номер обрабатываемого элемента;

  • n– количество элементов совокупности.

Dim a, i, n As Integer

Для вычисления среднего арифметического необходимо найти сумму положительных элементов и их количество. Эти значения будем хранить соответственно в переменных summaи kol.

Dim summa, kol As Integer

Еще нам потребуется переменная для хранения результатов вычислений. Так как среднее арифметическое определяется в результате деления, то переменная sredобязательно должна иметь рациональный тип данных.

Dim sred As Single

Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

n = Val(InputBox("Введите количество элементов"))

Перед основным циклом задаем начальные значения для суммы и количества.

summa = 0

kol = 0

Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит nэлементов, то номера этих элементов будут меняться в диапазоне от 1 доn. Поэтому начальное значение счетчикаi(номера элемента) равно 1, а конечное –n.

For i = 1 To n

Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

a = Val(InputBox("Введите элемент совокупности"))

В окно списка выводим номер элемента совокупности (i) и его значение (a). КонстантаvbTabиспользуется для организации вывода в две колонки.

lstA.Items.Add(Str(i) + vbTab + Str(a))

Анализируем значение очередного элемента совокупности.

If a > 0 Then

Если элемент – положительное число, то его значение необходимо прибавить к сумме, а количество положительных элементов увеличить на единицу.

summa += a

kol += 1

End If

Next

После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

lstA.Items.Add("-----------------------------------")

Так как среднее арифметическое получается в результате деления, то перед его непосредственным вычислением необходимо проверить, обращается ли знаменатель дроби в ноль.

If kol = 0 Then

Если в совокупности не было положительных чисел, то их количество будет равно нулю. В этом случае невозможно вычислить среднее арифметическое положительных элементов. Поэтому вместо ответа мы выводим поясняющее сообщение.

lstA.Items.Add("Нет положительных чисел")

Else

В противном случае (если количество неравно нулю) вычисляем среднее арифметическое.

sred = summa / kol

И выводим найденное значение.

lstA.Items.Add("Сред. арифм. полож. чисел =" + _

Str(sred))

End If

Вычисление среднего геометрического отрицательных чисел в совокупности.

Среднее геометрическое элементов совокупности, удовлетворяющих некоторому условию (например, отрицательных) определяется как корень степени kиз произведения необходимых элементов, гдеk– количество таких элементов. Поэтому задача вычисления среднего геометрического решается как комбинация задач вычисления произведения и количества нужных элементов совокупности. Извлечение корняk-ой степени реализуется как возведение числа в степень (1 /k).

Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

  • a– для хранения очередного элемента совокупности;

  • i– номер обрабатываемого элемента;

  • n– количество элементов совокупности.

Dim a, i, n As Integer

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

Dim proiz, kol As Integer

Среднее геометрическое определяется в результате извлечения корня некоторой степени. Поэтому итоговая переменная обязательно будет иметь рациональный тип данных.

Dim geom As Single

Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

n = Val(InputBox("Введите количество элементов"))

Перед основным циклом задаем начальные значения для произведения и количества. Обратите внимание, что начальное значение произведения равно единице.

proiz = 1

kol = 0

Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит nэлементов, то номера этих элементов будут меняться в диапазоне от 1 доn. Поэтому начальное значение счетчикаi(номера элемента) равно 1, а конечное –n.

For i = 1 To n

Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

a = Val(InputBox("Введите элемент совокупности"))

В окно списка выводим номер элемента совокупности (i) и его значение (a). КонстантаvbTabиспользуется для организации вывода в две колонки.

lstA.Items.Add(Str(i) + vbTab + Str(a))

Анализируем значение очередного элемента совокупности.

If a < 0 Then

Если элемент является отрицательным числом, то его необходимо включить в произведение. При этом количество отрицательных элементов увеличится на единицу.

proiz *= a

kol += 1

End If

Next

После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

lstA.Items.Add("-----------------------------------")

Перед вычислением среднего геометрического необходимо провести анализ промежуточных результатов.

if kol = 0 Then

Если количество отрицательных чисел равно нулю, то задача вычисления среднего геометрического не имеет смысла. В этом случае надо вывести поясняющее сообщение.

lstA.Items.Add("Нет отрицательных чисел")

Else

В противном случае мы должны проверить знак полученного произведения.

If proiz > 0 Then

Если произведение чисел получилось положительным, то можно извлекать из него корень любой ненулевой степени.

geom = proiz ^ (1 / kol)

Else

Иначе (когда подкоренное выражение отрицательное) извлечение корня возможно только при нечетной степени корня. Очевидно, что для данной задачи отрицательное произведение будет получаться только при нечетном количестве сомножителей. Поэтому дополнительную проверку степени корня можно не выполнять. Обратите внимание, что в Visual Basic 2005 операция извлечения корня произвольной степени определена только для положительных подкоренных выражений. Поэтому, когда необходимо извлечь корень нечетной степени из отрицательного числа, поступают следующим образом. Корень извлекается из модуля подкоренного выражения, а у полученного результата знак меняется на противоположный.

geom = -Math.Abs(proiz) ^ (1 / kol)

End If

После извлечения корня выводим полученное значение среднего геометрического отрицательных элементов совокупности.

lstA.Items.Add("Сред. геом. отриц. чисел =" + _

Str(geom))

End If

Поиск максимального числа в совокупности.

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

Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

  • a– для хранения очередного элемента совокупности;

  • i– номер обрабатываемого элемента;

  • n– количество элементов совокупности.

Dim a, i, n As Integer

Нам потребуется переменная, в которой будет храниться значение максимального элемента совокупности. Обратите внимание, что тип этой переменной всегда будет совпадать с типом элемента совокупности.

Dim max As Integer

Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

n = Val(InputBox("Введите количество элементов"))

Перед основным циклом задаем начальное значение максимума. Так как в процессе анализа элементов совокупности значение максимума будет увеличиваться, то начальное значение этой переменной должно быть достаточно маленьким.

max = -100000

Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит nэлементов, то номера этих элементов будут меняться в диапазоне от 1 доn. Поэтому начальное значение счетчикаi(номера элемента) равно 1, а конечное –n.

For i = 1 To n

Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

a = Val(InputBox("Введите элемент совокупности"))

В окно списка выводим номер элемента совокупности (i) и его значение (a). КонстантаvbTabиспользуется для организации вывода в две колонки.

lstA.Items.Add(Str(i) + vbTab + Str(a))

Анализируем значение элемента совокупности.

If a > max Then

Если оно превышает ранее найденный максимум, то значение текущего элемента совокупности запоминается как новое значение максимума.

max = a

End If

Next

После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

lstA.Items.Add("-----------------------------------")

Теперь выводим найденное значение максимума.

lstA.Items.Add("Максимальное число =" + Str(max))

Поиск минимального числа, кратного трем.

Нахождение минимального элемента совокупности практически аналогичного поиску максимума. Изменить надо лишь используемую операцию сравнения и начальное значение. Так как в процессе анализа элементов совокупности значение минимума будет уменьшаться, то его начальное значение должно быть достаточно большим.

При поиске минимального (или максимального) числа, удовлетворяющего некоторому условию (например, кратного трем), в алгоритме возникает дополнительное условие. Теперь в сравнении будут участвовать только те элементы, которые удовлетворяет поставленному условию.

Рассмотрим особенности программной реализации этого алгоритма. Для обработки совокупности нам потребуются три целочисленных переменных:

  • a– для хранения очередного элемента совокупности;

  • i– номер обрабатываемого элемента;

  • n– количество элементов совокупности.

Dim a, i, n As Integer

Нам потребуется переменная, в которой будет храниться значение минимального элемента совокупности. Обратите внимание, что тип этой переменной всегда будет совпадать с типом элемента совокупности.

Dim min As Integer

Работа программы начинается с очистки окна списка от результатов предыдущих запусков программы.

lstA.Items.Clear()

Просим пользователя ввести количество элементов совокупности. Так как эта информация является числовой, то при ее вводе необходимо использовать преобразование Val.

n = Val(InputBox("Введите количество элементов"))

Перед основным циклом задаем начальное значение минимума. Так как в процессе анализа элементов совокупности значение минимума будет уменьшаться, то начальное значение этой переменной должно быть достаточно большим.

min = 100000

Организуем основной цикл для обработки совокупности чисел. Так как совокупность содержит nэлементов, то номера этих элементов будут меняться в диапазоне от 1 доn. Поэтому начальное значение счетчикаi(номера элемента) равно 1, а конечное –n.

For i = 1 To n

Вводим очередной элемент совокупности. Так как элемент совокупности является числом, то для его ввода необходимо использовать преобразование Val.

a = Val(InputBox("Введите элемент совокупности"))

В окно списка выводим номер элемента совокупности (i) и его значение (a). КонстантаvbTabиспользуется для организации вывода в две колонки.

lstA.Items.Add(Str(i) + vbTab + Str(a))

Анализируем значение очередного элемента совокупности.

If a Mod 3 = 0 And a < min Then

Если оно кратно трем (то есть остаток от его деления на 3 равен нулю) и само значение меньше ранее найденного минимума, то значение текущего элемента совокупности запоминается как новое значение минимума.

min = a

End If

Next

После завершения основного цикла выводим полученные результаты. Сначала печатаем горизонтальную черту из нескольких знаков минус. Она зрительно отделит исходные данные от результатов вычислений.

lstA.Items.Add("-----------------------------------")

Так как в совокупности может не быть чисел, кратных трем, то перед выводом результата, необходимо провести его проверку.

If min = 100000 Then

Если за время выполнения основного цикла значение минимума не изменилось и совпадает с начальным значением, значит, что в совокупности не было элементов, кратных трем. В таком случае необходимо вместо значения минимума вывести поясняющее сообщение.

lstA.Items.Add("Нет чисел, кратных 3")

Else

Иначе мы можем вывести найденное значение.

lstA.Items.Add("Минимальное кратное трем = " + _

Str(min))

End If

Два примера работы программы в режиме вычисления среднего арифметического положительных чисел приведены на рис. 28.

Рис. 28.Пример работы программы обработки совокупности с известным числом элементов

studfiles.net

Факторизация факториала

Полученный результат

Название темы, для несведующих людей, может быть немного запутанным, и даже похже на тафтологическое выражение "масло масленное". На самом деле, под название темы  подразумевается разложение факториала на простейшие множители с степенями.

Зачем это надо?

Кто сталкивался с факториалами, знают что уже при значении 20, факториал достигает огромных значений 2432902008176640000

При факториале 100 значение получается еще больше, и возникает резонный вопрос а как можно представить факториал такого числа в более удобной и наглядной форме? Во первых это красиво, а во вторых полезно, так как отвечает еще и на попутно возникающий вопрос, например , сколько двоек/пятерок/семерок в факториале числа 2015? 

Что бы решить такую задачу, не надо  вычислять факториал от числа 2015, а потом искать число целочисленных делений на тройку например , достаточно  знать формулу  по который рассчитывается число вхождений.

Итак если число p простое, то количество вхождений в факториал числа m, вычисляется как

 

где квадратные скобки означают что берётся целая часть от деления.

Самый простой пример, сколько раз входит число 3 в факториал 50?

Рассчитываем:

то есть тройка встречается в числе 50! ровно 22 раза.

Теперь несложно, пробежавшись по всем простым числам  от 1 до 50, для каждого из них узнать количество вхождений.

Окончательный ответ, в виде факторизации факториала пятидести будет иметь вид.

Решим еще один пример, часто встречающийся.

На какое количество нулей оканчивается факториал числа 306?

Для решения такой задачи надо знать что 10 это произвдение двух простых чисел 2 и 5.

Таким образом узнав количество вхождений пятерки в факториал ( количество вхождений двойки, естественно будет больше), мы  узнаем какое количество нулей будет в факториала 306.

Ответ:  на 75 нулей будет оканчиватся заданный факториал.

Удачных расчетов!

  • Формулы сумм ряда натуральных чисел в целочисленной степени >>

www.abakbot.ru



О сайте

Онлайн-журнал "Автобайки" - первое на постсоветском пространстве издание, призванное осветить проблемы радовых автолюбителей с привлечение экспертов в области автомобилестроения, автоюристов, автомехаников. Вопросы и пожелания о работе сайта принимаются по адресу: Онлайн-журнал "Автобайки"