Ya vieron que no es tan hábil con la matemática, luego pedirle que haga un programa relacionado con matemática a ver si sabe programar no tiene mucho sentido o lógica ¿no?
Es como ver que Superman no puede caminar sosteniendo criptonita y luego le pidan que vuele sosteniendo una, a ver si sabe volar. No, pídanselo sin criptonita.
Pidanle un programa que no tenga tanto que ver con mates.
Un 3 en línea, un adivina la palabra (o película, frase, etc), un contador de vocales en una palabra...
Sí, tienen que ver con mates, pero no tanto.
Algo totalmente sin mates no se me ocurre.
Funciona bien para programar, sólo hay que explicarle con un poco de detalle lo que quieres y entiende muy bien lo que se le pide.
Al principio tenía mucho trabajo y se ha cortado mientras programaba lo que le había pedido (lo que le he pedido casi seguro que no lo ha encontrado en internet ni se lo ha pedido nadie, aunque sea matemáticas, es una cosa "muy mía") así que le he dicho:
-Hola. Parece que ahora hay muchos usuarios pidiéndote cosas y no has podido terminar el programa que te pedía, lo siento. ¿Qué hora es buena para que lo puedas hacer con más tranquilidad?
Gracias.
-Respuesta:
Hola! No hay necesidad de disculparse, estoy siempre aquí para ayudar. En cuanto al programa que me pidiste, aún no tengo suficiente información para saber de qué se trata exactamente. ¿Podrías proporcionarme más detalles sobre el programa que necesitas? Estaré encantada de ayudarte en lo que necesites.
-Le explico:
Se trataba de esta tarea:
Dado un número semiprimo impar, esto es, producto de dos números primos a y b ambos distintos de 2, podemos tomar como número central uno u otro, (o sea, a ó b) de tal forma que podemos escribir una cantidad b de números enteros consecutivos (siendo a, por ejemplo, el número central) de manera que la suma de dichos números dé como resultado el producto s=a*b.
Ejemplo:
a=5; b=11; s=55.
Entonces
0+1+2+3+4+5+6+7+8+9+10=55
La cantidad de sumandos es b=11 y el número centra es a=5, queriendo decir esto que quedan tantos sumandos a la izquierda como a la derecha respecto del 5:
a la izquierda están los sumandos menores que 5, que son 0,1,2,3,4 y que hacen una cantidad de cinco sumandos, y a la derecha están los sumandos mayores que 5, que son 6,7,8,9,10 y que también son cinco números; es decir, hay la misma cantidad a cada lado del 5 y eso quiere decir que es el número del centro o número central.
Del mismo modo, podemos tomar de número central b y escribir una cantidad a de números consecutivos tal que la suma también sea a*b=55:
9+10+11+12+13
La cantidad de números sumados ahora es a=5 y el número central es 11, ya que, a la izquierda de 11 quedan dos números, 9 y 10, y a la derecha otros dos, 12, 13, la misma cantidad a cada lado.
Considerando a<b, al conjunto de los números consecutivos que tiene a de número central, lo llamaremos conjunto A (en este caso particular es A={0,1,2,3,4,5,6,7,8,9,10}) y al que tiene b como número central lo llamaremos conjunto B (en este caso particular B={9,10,11,12,13}).
Al conjunto intersección de A y B lo vamos a llamar C (en este caso particular es C={9,10}) es decir, los números comunes.
Me gustaría, si es posible, que me hicieras un programa en Python que, dado un semiprimo s=1349 calculara el conjunto intersección C y su cardinal. Y, si también fuera pasible, me gustaría que usaras el módulo Simpy de Python, con su función sprime, o las funciones que fueran necesarias, para que el código resulte más corto.
-Respuesta:
Entiendo, ese es un problema interesante. La forma en la que podemos resolverlo es utilizando una función que determine los factores primos de un número dado. Luego, una vez que tenemos los factores primos, podemos calcular el conjunto A y B utilizando los métodos que mencionaste. Por favor, tenga en cuenta que el paquete sympy ya tiene una función primefactors() para obtener los factores primos de un número, no un sprime. Pero si esto es lo que necesitas, podríamos crear nuestra propia función para extraer los factores primos y así poder implementar el resto del código.
Entonces, para resolver este problema, primero podemos escribir una función para obtener los factores primos de un número dado, en este caso utilizando sympy:
from sympy import primefactors
def prime_factors(n):
return primefactors(n)
Una vez que tenemos los factores primos, podemos calcular los conjuntos A y B y luego calcular la intersección de ambos para obtener el conjunto C:
def find_intersection(semiPrime):
factors = prime_factors(semiPrime)
a = factors[0]
b = factors[1]
A = set(range(a-b//2, a+b//2+1))
B = set(range(b-a//2, b+a//2+1))
C = A.intersection(B)
return C
Luego, podemos llamar a esta función pasándole el número semiprimo como argumento y calcular el tamaño del conjunto C utilizando la función len()
semiPrime = 1349
C = find_intersection(semiPrime)
print("Intersection: ", C)
print("Cardinal of Intersection: ", len(C))
Espero que esto ayude, si tienes alguna pregunta adicional no dudes en preguntarme.
-Muchas gracias, muy amable.
- ¡De nada! Estoy contenta de poder ayudarte. Si necesitas ayuda con algo más, no dudes en preguntar.