<jupyter_start><jupyter_text>Laboratorio 01 - MAT281 Nombre: <NAME> 1. Problema 01<jupyter_code>## Función auxiliar para determinar el factorial de un entero n ##
def factorial(n:int)->int:
    fact=1 # Iniciamos la variable con el neutro multiplicativo ##
    for i in range(1,n+1):
        fact*=i
    return fact
## Función para calcular euler segun la serie dada hasta el término n ##
def calcular_euler(n:int)->float:
    euler=0 ## Incializamos la suma parcial con el neutro aditivo ## 
    for i in range (0,n+1): ## Recorremos desde 0 hasta n (incluyéndolo) y sumamos los términos ## 
        euler+=1/factorial(i) 
    return euler ## Retornamos la suma ##
## Ejemplo 1 ##
calcular_euler(10)
## Ejemplo 2 ##
calcular_euler(100)
## Ejemplo 3 ##
calcular_euler(1000)<jupyter_output><empty_output><jupyter_text>2. Problema 02<jupyter_code>## Función auxiliar para determinar la suma de los divisores propios de un entero n ##
def suma_divisores(n:int)->int:
    suma=1 ## 1 divide a todo número entero ##
    for i in range(2,n): ## Recorremos tal que 1<i<n  ##
        if n%i==0: ## Si el resto de la división es nulo, entonces i|n ##
            suma+=i
            i+=1 
    return suma ## Retornamos la suma de los divisores propios ##
## Función para determinar si dos números son amigos ##
def amigos(a:int, b:int)->bool:
    if suma_divisores(a)==b and a==suma_divisores(b): ## Comprobamos que σ(a)=b y σ(b)=a ##
        return True
    return False
## Ejemplo 1 ##
amigos(220, 284)
## Ejemplo 2 ##
amigos(13, 12)
## Ejemplo 3 ##
amigos(9363584, 9437056)<jupyter_output><empty_output><jupyter_text>3. Problema 03<jupyter_code>## Función para probar si un entero positivo n cumple con la conjetura de collatz ##
def collatz(n:int)->int:
    lista=[]
    if n<=0:
        print("Error: Ingrese un entero positivo")
        return ## La conjetura sólo considera enteros positivos ##
    while n!=1: ## Entran en el ciclo los enteros mayores a 1, y se ve a que caso pertenecen ##
        if n%2==0: 
            lista.append(n)
            n//=2 ## Agregamos n y si este es par lo dividimos por 2 ##
        else:
            lista.append(n)
            n=3*n+1 ## Agregamos n y si este es impar lo multiplicamos por 3 y sumamos 1 ##
    lista.append(1) ## Al salir del ciclo significa que n=1, lo agregamos a la lista ##
    return lista ## Retornamos la lista ##
## Ejemplo 1 ##
collatz(9)
## Ejemplo 2 ##
collatz(11)
## Ejemplo 3 ##
collatz(17)<jupyter_output><empty_output><jupyter_text>4. Problema 04<jupyter_code>## Función auxiliar para determinar si un natural n es primo ##
def primo(n:int):
    if n<=1:
        return False ## Los primos son naturales mayores a 1 ##
    if n==2:
        return True ## Sabemos que 2 es primo ##
    if n%2==0:
        return False ## Por lo tanto, ningún otro par es primo ##
    k=3
    while k**2<=n: ## No es necesario buscar después de sqrt(n) ##
        if n%k==0:
            return False ## Si n es divisible por k, entonces no es primo ##
        k+=2 ## Probamos solo los impares ##
    return True ## Si no se encontró ningún factor menor que raíz de n, entonces n es primo ##
## Función para determinar si un número entero par n mayor que 2 cumple la conjetura de Goldbach (1742) ##
def goldbach(n:int)->tuple:
    if n%2!=0: 
        print("Error: Ingrese un entero par")
        return ## La conjetura no considera impares ##
    if n<4:
        print("Error: Ingrese un entero par mayor o igual a 4")
        return ## La conjetura no considera pares menores o iguales a 2 ##
    for i in range (2,n-1): ## Recorremos hasta n-2 porque no vale la pena revisar n-1 ni n ##
        if (primo(i)==True) and (primo(n-i)==True): ## Dado que n=i+(n-i) si i y n-i son primos, entonces cumple la conjetura ##
            return (i,n-i) ## Retornamos una tupla con este par de primos ##
    print("No existe un par de números primos que sumen", n)
    return ## Esto es por si algún entero par mayor que 2 no lo llegase a cumplir (cosa que veo poco probable) ##
## Ejemplo 1 ##
goldbach(6)
## Ejemplo 2 ##
goldbach(1312)
## Ejemplo 3 ##
goldbach(1237897812)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.11387213510253318, 'fraction_numerical': 0.03232810615199035, 'mean_word_length': 3.1794354838709675, 'pattern_counts': {'":': 0, '<': 24, '<?xml version=': 0, '>': 24, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '528185', 'license': 'MIT', 'n_tokens_mistral': 1568, 'n_tokens_neox': 1490, 'n_words': 522, 'path': 'homeworks/lab_01.ipynb', 'repo_name': 'ggeedorah/mat281_portfolio', 'size': '4163'}