Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Какая формула должна быть при "3n!"?

Сережа Прокофьев Ученик (167), на голосовании 11 месяцев назад
Задача ниже. не могу подобрать правильную формулу для счета числителя, то есть беру как для факториала по n!, а нужно для факториала 3n!= 1*2*3*...*(3n-1)*3n. Не знаю, как записать правильно в код


import random
import numpy as np
import decimal as de
import math

# Создание матрицы
k = random.randint(2, 10) # Генерация случайного целого числа от 2 до 10 и присвоение его переменной k
x = np.random.uniform(-1, 1, (k, k)) # Генерация случайной матрицы размером kxk в диапазоне от -1 до 1

t = input("Введите число t от 1 до 100: ") # Запрос у пользователя ввести число t от 1 до 100

# Проверка t на правильность ввода
while True:
if t.isdigit() and 1 <= int(t) <= 100: # Проверка, является ли введенное значение целым числом в нужном диапазоне
t = int(t) # Преобразование введенной строки в целое число
break # Прерывание цикла
elif not t.isdigit(): # Если введенная строка не является целым числом
t = input("t не является числом, введите его ещё раз: ")
elif int(t) < 1 or int(t) > 100: # Если введенное число не попадает в нужный диапазон
t = input("Число t меньше единицы или больше ста, введите его ещё раз: ")

n = 1 # Переменная для номера слагаемого
factorial = 1 # Переменная факториала
znak = 1 # Переменная для знака
rezultat = de.Decimal(0) # Переменная для результата как Decimal
matrix = x # Переменная случайной матрицы x
de.getcontext().prec = t + 60 # Установка точности для вычислений
fun = de.Decimal(0) # Переменная fun в виде Decimal для вычисления

while abs( rezultat.as _tuple().exponent) < t: # Цикл while, выполняемый, пока число знаков после запятой результата не будет больше числа t
fun = de.Decimal(1 * np.linalg.det(np.multiply(matrix, math.factorial(3*n)))) * de.Decimal((1 / math.factorial(3*n))) # Вычисление слагаемого
rezultat += znak * fun # Прибавление результата с учетом знака
n += 1 # Следующий номер слагаемого
factorial *= 3*n*() # Вычисление факториала для числителя
znak = -znak # Смена знака для следующего слагаемого

print(x) # Вывод матрицы
print(f"Результат: {rezultat:.{t}f}") # Вывод результата с указанием числа знаков после запятой
Голосование за лучший ответ
Jurijus Zaksas Искусственный Интеллект (470963) 1 год назад
Факториалы вычисляются циклами, никаких волшебных "формул" для их вычисления нет.
У тебя все хорошо, кроме того, что ты возводишь еще и тройку в степень постоянно.

factorial = 3 # - вынеси за пределы цикла
factorial *= n - Убери тройку отсюда.
Сережа ПрокофьевУченик (167) 1 год назад
спасибо
Похожие вопросы