Existe una función con esta forma:
n será siempre un número primo.
f(1,n) = 1 para todo n
f(x,n) = 1 if x mod n != 0 else f(x/n,n)*n
O representada de otra forma (aumentando x pero avanzando en vertical):
f(x,2) f(x,3) f(x,5)
1 2 1 1 3 1 1 1 1 5
1 4 1 1 3 1 1 1 1 5
1 2 1 1 9 1 1 1 1 5
1 8 1 1 3 1 1 1 1 5
1 2 1 1 3 1 1 1 1 25
1 4 1 1 9 1 1 1 1 5
1 2 1 1 3 1 1 1 1 5
1 16 1 1 3 1 1 1 1 5
1 2 1 1 27 1 1 1 1 5
1 4 1 1 3 1 1 1 1 25
Que coinciden con los divisores del número en cuestión.
Si a alguien se le ocurre alguna forma rápida de calcular esta función (o familia de funciones), evitando la recursividad, se podrá factorizar cualquier número entero de forma muy rápida.
Copyleft Ender. El presente artículo no tiene finalidad informativa, de
creación de opinión pública o de entretenimiento. Tiene como finalidad
principal, la enseñanza y la divulgación de experiencias, proyectos,
pensamientos y conocimientos del autor. Se permite la copia textual, la
traducción y la distribución de este artículo entero en cualquier medio,
a condición de que este aviso sea conservado. Se permite la cita. El
autor no reclamará ninguna cantidad por el ejercicio de las dos
autorizaciones anteriores. No autorizo a ninguna Entidad de Derechos de
Autor a reclamar cantidad alguna en mi nombre por el ejercicio de los
dos derechos anteriores.
viernes, 20 de mayo de 2016
sábado, 14 de mayo de 2016
Otra forma de factorizar un número
Inspirado por:
http://criticasfaciles.blogspot.com/2015/03/ensenar-restar-de-forma-manipulativa.html
'''
The method used to get two factors of a number is based on geometry properties.
Any multiplication of integers x*y can be seen as a grid of squares (in a graph paper) x rows and y columns.
If the multiplication is not exactly the desired number, there will be a number of squares, that I imagine
as another not complete column, as rest.
This method start forming a grid with the integer square root^2 + rest
if rest==0: we have what we want
if rest!=0, we remove rows and convert them in columns until we have a perfect rectangle.
Graphical example: 21 is our desired number -> integer square root(21) = 4
OOOORR OOOOOR
OOOOR -> OOOOO
OOOOR OOOOO
OOOOR OOOOO
-> Remove the last row and convert it into more columns
OOOOORX
OOOOOXX -> 7*3
OOOOOXX
An advantage of this algorithm is that the job can be divided between several processors (or machines),
dividing the different combinations of initial row and column sizes.
This method has an invariant: rows * columns + rest == desired number
This method is mathematics, can not be patented or copyrighted.
This implementation is released under the GNU GPL v3 or greater.
@package factorizar
'''
def improved_i_sqrt(n):
"""
http://stackoverflow.com/questions/15390807/integer-square-root-in-python
"""
def factorize(number):
horizontal = vertical = improved_i_sqrt(number)
if horizontal * vertical == number:
return horizontal, vertical
rest = number - (horizontal * vertical)
while rest != 0:
rest, vertical = rest + horizontal, vertical -1
# faster than while resto - vertical >= 0: horizontal += 1, resto -= vertical
c = rest - vertical
if 0 <= c:
if c < vertical:
rest, horizontal = rest - vertical, horizontal + 1
else:
horizontal, rest = horizontal + rest // vertical, c % vertical
return (horizontal, vertical, number)
Copyleft Ender. El presente artículo no tiene finalidad informativa, de creación de opinión pública o de entretenimiento. Tiene como finalidad principal, la enseñanza y la divulgación de experiencias, proyectos, pensamientos y conocimientos del autor. Se permite la copia textual, la traducción y la distribución de este artículo entero en cualquier medio, a condición de que este aviso sea conservado. Se permite la cita. El autor no reclamará ninguna cantidad por el ejercicio de las dos autorizaciones anteriores. No autorizo a ninguna Entidad de Derechos de Autor a reclamar cantidad alguna en mi nombre por el ejercicio de los dos derechos anteriores.
http://criticasfaciles.blogspot.com/2015/03/ensenar-restar-de-forma-manipulativa.html
'''
The method used to get two factors of a number is based on geometry properties.
Any multiplication of integers x*y can be seen as a grid of squares (in a graph paper) x rows and y columns.
If the multiplication is not exactly the desired number, there will be a number of squares, that I imagine
as another not complete column, as rest.
This method start forming a grid with the integer square root^2 + rest
if rest==0: we have what we want
if rest!=0, we remove rows and convert them in columns until we have a perfect rectangle.
Graphical example: 21 is our desired number -> integer square root(21) = 4
OOOORR OOOOOR
OOOOR -> OOOOO
OOOOR OOOOO
OOOOR OOOOO
-> Remove the last row and convert it into more columns
OOOOORX
OOOOOXX -> 7*3
OOOOOXX
An advantage of this algorithm is that the job can be divided between several processors (or machines),
dividing the different combinations of initial row and column sizes.
This method has an invariant: rows * columns + rest == desired number
This method is mathematics, can not be patented or copyrighted.
This implementation is released under the GNU GPL v3 or greater.
@package factorizar
'''
def improved_i_sqrt(n):
"""
http://stackoverflow.com/questions/15390807/integer-square-root-in-python
"""
def factorize(number):
horizontal = vertical = improved_i_sqrt(number)
if horizontal * vertical == number:
return horizontal, vertical
rest = number - (horizontal * vertical)
while rest != 0:
rest, vertical = rest + horizontal, vertical -1
# faster than while resto - vertical >= 0: horizontal += 1, resto -= vertical
c = rest - vertical
if 0 <= c:
if c < vertical:
rest, horizontal = rest - vertical, horizontal + 1
else:
horizontal, rest = horizontal + rest // vertical, c % vertical
return (horizontal, vertical, number)
Copyleft Ender. El presente artículo no tiene finalidad informativa, de creación de opinión pública o de entretenimiento. Tiene como finalidad principal, la enseñanza y la divulgación de experiencias, proyectos, pensamientos y conocimientos del autor. Se permite la copia textual, la traducción y la distribución de este artículo entero en cualquier medio, a condición de que este aviso sea conservado. Se permite la cita. El autor no reclamará ninguna cantidad por el ejercicio de las dos autorizaciones anteriores. No autorizo a ninguna Entidad de Derechos de Autor a reclamar cantidad alguna en mi nombre por el ejercicio de los dos derechos anteriores.
jueves, 5 de mayo de 2016
La lucha contra los vendedores callejeros
Hay un tipo de vendedores callejeros que ningún gobierno hasta ahora se ha atrevido a poner freno.
Son los vendedores que van casa por casa ofreciendo mejores tarifas, revisiones más baratas, .......
Estos vendedores siempre suelen darte estafas, entre otras cosas, porque suele ser el único medio que tienen para conseguir clientes, ya que sus servicios son muy inferiores a los de los demás.
También se podrían meter en el mismo saco los vendedores que van visitando a los médicos para decirles que receten tal medicina en lugar de otra.
Estos dos son los vendedores callejeros peligrosos, los pobres que ofrecen un producto de origen desconocido y calidad desconocida al menos no te intentan imponer ese producto, y es una de las escasas vías que tienen para conseguir dinero para comer.
Y la verdad es que para evitar que estos individuos existan, la solución es bastante sencilla.
Si se crea un servicio público donde se puede denunciar esa estafa, si se comprueba que realmente la ha encargado la empresa (no una empresa de la competencia para deshacerse de esa empresa), la empresa que lo ha encargado debe pagar la mitad de todo el valor de la empresa. Se les acaban las ganas de inmediato. Dejamos de tener un país de corruptos, timadores y estafadores a un país más decente.
¿Y cómo comprobar que ha sido así?, por ejemplo en las compañías eléctricas con ex-presidentes del gobierno en su nómina, registrar los contratos, facturas y peticiones de dinero no declarable al demandante emitidos por la empresa, además de los escasos datos que le haya dejado el vendedor callejero (supuesto comercial). Si no se puede demostrar, al menos el demandante no sufrirá las consecuencias de la estafa.
Por desgracia ocurre como con el SPAM (el que Marianico llama legal e ilegal o cualquiera), se puede eliminar en 1 día para que no vuelva nunca, pero hay que tener ganas de hacerlo. Hay muchísimos mejores empleos que ese.
Copyleft Ender. El presente artículo no tiene finalidad informativa, de creación de opinión pública o de entretenimiento. Tiene como finalidad principal, la enseñanza y la divulgación de experiencias, proyectos, pensamientos y conocimientos del autor. Se permite la copia textual, la traducción y la distribución de este artículo entero en cualquier medio, a condición de que este aviso sea conservado. Se permite la cita. El autor no reclamará ninguna cantidad por el ejercicio de las dos autorizaciones anteriores. No autorizo a ninguna Entidad de Derechos de Autor a reclamar cantidad alguna en mi nombre por el ejercicio de los dos derechos anteriores.
Son los vendedores que van casa por casa ofreciendo mejores tarifas, revisiones más baratas, .......
Estos vendedores siempre suelen darte estafas, entre otras cosas, porque suele ser el único medio que tienen para conseguir clientes, ya que sus servicios son muy inferiores a los de los demás.
También se podrían meter en el mismo saco los vendedores que van visitando a los médicos para decirles que receten tal medicina en lugar de otra.
Estos dos son los vendedores callejeros peligrosos, los pobres que ofrecen un producto de origen desconocido y calidad desconocida al menos no te intentan imponer ese producto, y es una de las escasas vías que tienen para conseguir dinero para comer.
Y la verdad es que para evitar que estos individuos existan, la solución es bastante sencilla.
Si se crea un servicio público donde se puede denunciar esa estafa, si se comprueba que realmente la ha encargado la empresa (no una empresa de la competencia para deshacerse de esa empresa), la empresa que lo ha encargado debe pagar la mitad de todo el valor de la empresa. Se les acaban las ganas de inmediato. Dejamos de tener un país de corruptos, timadores y estafadores a un país más decente.
¿Y cómo comprobar que ha sido así?, por ejemplo en las compañías eléctricas con ex-presidentes del gobierno en su nómina, registrar los contratos, facturas y peticiones de dinero no declarable al demandante emitidos por la empresa, además de los escasos datos que le haya dejado el vendedor callejero (supuesto comercial). Si no se puede demostrar, al menos el demandante no sufrirá las consecuencias de la estafa.
Por desgracia ocurre como con el SPAM (el que Marianico llama legal e ilegal o cualquiera), se puede eliminar en 1 día para que no vuelva nunca, pero hay que tener ganas de hacerlo. Hay muchísimos mejores empleos que ese.
Copyleft Ender. El presente artículo no tiene finalidad informativa, de creación de opinión pública o de entretenimiento. Tiene como finalidad principal, la enseñanza y la divulgación de experiencias, proyectos, pensamientos y conocimientos del autor. Se permite la copia textual, la traducción y la distribución de este artículo entero en cualquier medio, a condición de que este aviso sea conservado. Se permite la cita. El autor no reclamará ninguna cantidad por el ejercicio de las dos autorizaciones anteriores. No autorizo a ninguna Entidad de Derechos de Autor a reclamar cantidad alguna en mi nombre por el ejercicio de los dos derechos anteriores.
Suscribirse a:
Entradas (Atom)