viernes, 20 de mayo de 2016

Más información sobre la factorización de números

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.

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.

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.