Menu Close

La conjetura de Levy

Hyman Levy observó que

    7 = 3 + 2 x 2
    9 = 3 + 2 x 3 =  5 + 2 x 2
   11 = 5 + 2 x 3 =  7 + 2 x 2
   13 = 3 + 2 x 5 =  7 + 2 x 3
   15 = 3 + 2 x 5 = 11 + 2 x 2
   17 = 3 + 2 x 7 =  7 + 2 x 5 = 11 + 2 x 3 = 13 + 2 x 2
   19 = 5 + 2 x 7 = 13 + 2 x 3

y conjeturó que todos los número impares mayores o iguales que 7 se pueden escribir como la suma de un primo y el doble de un primo. El objetivo de los siguientes ejercicios es comprobar la conjetura de Levy.

Definir las siguientes funciones

   descomposicionesLevy :: Integer -> [(Integer,Integer)]
   graficaLevy          :: Integer -> IO ()

tales que

  • (descomposicionesLevy x) es la lista de pares de primos (p,q) tales que x = p + 2q. Por ejemplo,
     descomposicionesLevy  7  ==  [(3,2)]
     descomposicionesLevy  9  ==  [(3,3),(5,2)]
     descomposicionesLevy 17  ==  [(3,7),(7,5),(11,3),(13,2)]
  • (graficaLevy n) dibuja los puntos (x,y) tales que x pertenece a [7,9..7+2x(n-1)] e y es el número de descomposiciones de Levy de x. Por ejemplo, (graficaLevy 200) dibuja
    La_conjetura_de_Levy-200

Comprobar con QuickCheck la conjetura de Levy.

Soluciones

import Data.Numbers.Primes
import Test.QuickCheck
import Graphics.Gnuplot.Simple
 
descomposicionesLevy :: Integer -> [(Integer,Integer)]
descomposicionesLevy x =
  [(p,q) | p <- takeWhile (< x) (tail primes)
         , let q = (x - p) `div` 2
         , isPrime q]
 
graficaLevy :: Integer -> IO ()
graficaLevy n =
  plotList [ Key Nothing
           , XRange (7,fromIntegral (7+2*(n-1)))
           , PNG ("La_conjetura_de_Levy-" ++ show n ++ ".png")
           ]
           [(x, length (descomposicionesLevy x)) | x <- [7,9..7+2*(n-1)]] 
 
-- La propiedad es
prop_Levy :: Integer -> Bool
prop_Levy x =
  not (null (descomposicionesLevy (7 + 2 * abs x)))
 
-- La comprobación es
--    λ> quickCheck prop_Levy
--    +++ OK, passed 100 tests.

Otras soluciones

  • Se pueden escribir otras soluciones en los comentarios.
  • El código se debe escribir entre una línea con <pre lang="haskell"> y otra con </pre>

Pensamiento

“Dios creó el número natural, y todo el resto es obra del hombre.”

Leopold Kronecker

3 soluciones de “La conjetura de Levy

  1. rebgongor
    import Data.Numbers.Primes
    import Graphics.Gnuplot.Simple
    import Test.QuickCheck
     
    descomposicionesLevy :: Integer -> [(Integer,Integer)]
    descomposicionesLevy x =
      [(p,q) | p <- takeWhile (<x) primes
             , q <- takeWhile (<div x 2) primes
             , p + 2*q == x]
     
    graficaLevy :: Integer -> IO ()
    graficaLevy n = do
      plotList [ Key Nothing, PNG "grafica_levy.png"]
               [(x, length (descomposicionesLevy x)) | x <- [7,9..2*(n-1)]]
     
    conjetura :: Integer -> Property
    conjetura n =
      odd n && n >= 7 ==> (not . null) $ descomposicionesLevy n
     
    -- λ> quickCheck conjetura
    -- +++ OK, passed 100 tests; 836 discarded.
  2. Enrique Zubiría
    import Data.Numbers.Primes
    import Graphics.Gnuplot.Simple
    import Test.QuickCheck
     
    descomposicionesLevy :: Integer -> [(Integer,Integer)]
    descomposicionesLevy n =
      [(p, q) | q <- takeWhile (<n) primes
              , let p = n - 2*q
              , isPrime p]
     
    graficaLevy :: Integer -> IO ()
    graficaLevy n = do
      plotList [ Key Nothing
               , PNG "conjeturaLevy.png"
               ]
               ([ (x, length $ descomposicionesLevy x)
                | n <- [1..n], let x = 7+2*(n-1)])
     
    conjeturaLevy :: Integer -> Property
    conjeturaLevy n =
      n > 0 ==> (length $ descomposicionesLevy (7+2*(n-1))) > 0
  3. rebgongor
    import Data.Numbers.Primes
    import Graphics.Gnuplot.Simple
    import Test.QuickCheck
     
    descomposicionesLevy :: Integer -> [(Integer,Integer)]
    descomposicionesLevy x =
      [(n,m) | n <- takeWhile (<x) primes
             , m <- takeWhile (<div x 2) primes
             , n + 2*m == x]
     
    graficaLevy :: Integer -> IO ()
    graficaLevy n = do
      plotList [Key Nothing, PNG "grafica_levy.png"]
               [(x,length (descomposicionesLevy x)) | x <- [7,9..2*(n-1)]]
     
    conjeturaLevy :: Integer -> Property
    conjeturaLevy n =
      odd n && n >= 7 ==> (not . null) $ descomposicionesLevy n
     
    -- λ> quickCheck conjeturaLevy
    -- +++ OK, passed 100 tests

Leave a Reply to Enrique Zubiría Cancel reply

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.