Exercicio de Programação MD2 - 211062956


FGA0108 - MATEMÁTICA DISCRETA 2 - T03 - CRISTIANE LOESCH

Link todos os codigos OneCompiler (com as saidas): https://onecompiler.com/python/4329xjvh9

Exercicio de Programação MD2 - 211062956

Jésus Gabriel Carvalho Ventura -211062956

RECURSÃO MATEMÁTICA

1. o cálculo de n! utilizando recursividade (exemplo teste 5!)

def fatorial(n):
    """Calcula o fatorial de um número n usando recursividade.

    Args:
        n: Um número inteiro não negativo.

    Returns:
        O fatorial de n.
    """

    if n == 0 or n == 1:
        return 1  # Caso base: 0! ou 1! é 1
    else:
        return n * fatorial(n - 1)  # Passo recursivo

# Exemplo de uso
numero = 5 #Coloque aqui o fatorial que deseja calcular
resultado = fatorial(numero)
print(f"O fatorial de {numero} é {resultado}")

2. a sequência de Fibonacci

def fibonacci(n):
    # Caso base: o primeiro e o segundo números da sequência são 0 e 1
    if n == 0:
        return 0
    elif n == 1:
        return 1
    # Passo recursivo: Fibonacci(n) = Fibonacci(n-1) + Fibonacci(n-2)
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

# Exemplo de teste: calcular os primeiros 10 números da sequência de Fibonacci
quantidade = 10
print("Sequência de Fibonacci:")
for i in range(quantidade):
    print(fibonacci(i), end=" ")

3. a impressão recursiva dos números naturais de 1 a n (exemplo teste 1 a 10)

def imprimir_numeros(n, atual=1):
    # Caso base: quando o número atual ultrapassa n, a recursão para
    if atual > n:
        return
    # Imprime o número atual
    print(atual, end=" ")
    # Chama a função novamente com o próximo número
    imprimir_numeros(n, atual + 1)

# Exemplo de teste: imprimir números de 1 a 10
n = 10
print(f"Números de 1 a {n}:")
imprimir_numeros(n)

4. um método recursivo que receba como entrada um número inteiro positivo n e retorne 1 + 2 + 3 + 4 + … + n

def soma_recursiva(n):
    # Caso base: se n é 1, retorna 1
    if n == 1:
        return 1
    # Passo recursivo: soma o número atual com a soma dos números anteriores
    else:
        return n + soma_recursiva(n - 1)

# Exemplo de teste: calcular a soma de 1 a 10
n = 10
resultado = soma_recursiva(n)
print(f"A soma de 1 a {n} é {resultado}")

DIVISIBILIDADE

5. Algoritmo de Euclides para o cálculo do MDC

def mdc(a, b):
    # Caso base: se o resto é 0, o MDC é o divisor atual
    if b == 0:
        return a
    # Passo recursivo: aplica o algoritmo de Euclides
    return mdc(b, a % b)

# Exemplo de teste: calcular o MDC de 56 e 98
numero1 = 56
numero2 = 98
resultado = mdc(numero1, numero2)
print(f"O MDC de {numero1} e {numero2} é {resultado}")

6. Calcular o MMC(a,b) a partir do MDC(a,b)

def mdc(a, b):
    # Algoritmo de Euclides para o MDC
    if b == 0:
        return a
    return mdc(b, a % b)

def mmc(a, b):
    # Calcula o MMC usando a fórmula MMC(a, b) = |a * b| / MDC(a, b)
    return abs(a * b) // mdc(a, b)

# Exemplo de teste: calcular o MMC de 15 e 20
numero1 = 15
numero2 = 20
resultado = mmc(numero1, numero2)
print(f"O MMC de {numero1} e {numero2} é {resultado}")

ARITMÉTICA MODULAR

7. Tabela Z_n para adição modular

def tabela_zn_adicao(n):
    # Inicializa uma matriz para a tabela
    tabela = [[(a + b) % n for b in range(n)] for a in range(n)]
    return tabela

def exibir_tabela(tabela):
    # Exibe a tabela formatada
    print("Tabela Z_n para adição modular:")
    for linha in tabela:
        print(" ".join(f"{num:2}" for num in linha))

# Exemplo de teste: tabela Z_5
n = 5
tabela = tabela_zn_adicao(n)
exibir_tabela(tabela)

8. Tabela Z_n para multiplicação modular

def tabela_zn_multiplicacao(n):
    # Inicializa uma matriz para a tabela
    tabela = [[(a * b) % n for b in range(n)] for a in range(n)]
    return tabela

def exibir_tabela(tabela):
    # Exibe a tabela formatada
    print("Tabela Z_n para multiplicação modular:")
    for linha in tabela:
        print(" ".join(f"{num:2}" for num in linha))

# Exemplo de teste: tabela Z_5
n = 5
tabela = tabela_zn_multiplicacao(n)
exibir_tabela(tabela)