Menu Close

Variación de la conjetura de Goldbach.

La conjetura de Goldbach afirma que

Todo número entero mayor que 5 se puede escribir como suma de tres números primos.

En este ejercicio consideraremos la variación consistente en exigir que los tres sumandos sean distintos.

Definir las funciones

   sumas3PrimosDistintos      :: Int -> [(Int,Int,Int)]
   conKsumas3PrimosDistintos  :: Int -> Int -> [Int]
   noSonSumas3PrimosDistintos :: Int -> [Int]

tales que

  • (sumas3PrimosDistintos n) es la lista de las descomposiciones decrecientes de n como tres primos distintos. Por ejemplo,
   sumas3PrimosDistintos 26  ==  [(13,11,2),(17,7,2),(19,5,2)]
   sumas3PrimosDistintos 18  ==  [(11,5,2),(13,3,2)]
   sumas3PrimosDistintos 10  ==  [(5,3,2)]
   sumas3PrimosDistintos 11  ==  []
  • (conKsumas3PrimosDistintos k n) es la lista de los números menores o iguales que n que se pueden escribir en k forma distintas como suma de tres primos distintos. Por ejemplo,
   conKsumas3PrimosDistintos 3 99  ==  [26,27,29,32,36,42,46,48,54,58,60]
   conKsumas3PrimosDistintos 2 99  ==  [18,20,21,22,23,24,25,28,30,34,64,70]
   conKsumas3PrimosDistintos 1 99  ==  [10,12,14,15,16,19,40]
   conKsumas3PrimosDistintos 0 99  ==  [11,13,17]
  • (noSonSumas3PrimosDistintos n) es la lista de los números menores o iguales que n que no se pueden escribir como suma de tres primos distintos. Por ejemplo,
   noSonSumas3PrimosDistintos 99   ==  [11,13,17]
   noSonSumas3PrimosDistintos 500  ==  [11,13,17]

Soluciones

import Data.Numbers.Primes
 
sumas3PrimosDistintos :: Int -> [(Int,Int,Int)]
sumas3PrimosDistintos n =
  [(a,b,c) | a <- takeWhile (<=n-5) primes
           , b <- takeWhile (<a) primes
           , let c = n - a - b
           , c < b
           , isPrime c]
 
conKsumas3PrimosDistintos :: Int -> Int -> [Int]
conKsumas3PrimosDistintos k n =
  [x | x <- [10..n]
     , length (sumas3PrimosDistintos x) == k]
 
noSonSumas3PrimosDistintos :: Int -> [Int]
noSonSumas3PrimosDistintos = conKsumas3PrimosDistintos 0

Pensamiento

En su claro verso
se canta y medita
sin grito ni ceño.

Antonio Machado

Avanzado

5 soluciones de “Variación de la conjetura de Goldbach.

  1. frahidzam
    import Data.Numbers.Primes (isPrime, primes)
     
    sumas3PrimosDistintos :: Int -> [(Int,Int,Int)]
    sumas3PrimosDistintos n
      | even n = [(a,n-a-2,2) | a <- takeWhile (<= (n -2)) primes
                              , isPrime (n-a-2)
                              , a > n-a-2
                              , a > 2
                              , 2 < n-a-2 ]
      | otherwise = [(a,b,n-a-b) | a <- (takeWhile (<= n) primes)
                                 , b <- (takeWhile (<= n) primes)
                                 , isPrime (n-a-b)
                                 , a > b
                                 , b > n-a-b
                                 , a > n-a-b]
     
    conKsumas3PrimosDistintos :: Int -> Int -> [Int]
    conKsumas3PrimosDistintos k n =
      [a | a <- [1..n]
         , length (sumas3PrimosDistintos a) == k]
     
    noSonSumas3PrimosDistintos :: Int -> [Int]
    noSonSumas3PrimosDistintos n =
      [1..9] ++ [a | a <- drop 4 (takeWhile (<= n) primes)
                   , null (sumas3PrimosDistintos a)]
  2. luipromor
    sumas3PrimosDistintos      :: Int -> [(Int,Int,Int)]
    sumas3PrimosDistintos x = nub $ orden [ (a,b,x-a-b) | a <- takeWhile (< x) primes, b <- takeWhile (< a) primes , isPrime (x-a-b) , a/=b , a /= x-a-b , b /= x-a-b]
      where orden [] = []
            orden ((a,b,c):xs) = f ( sort  [a,b,c]) : orden xs
            f [x,y,z] = (x,y,z)
     
    conKsumas3PrimosDistintos  :: Int -> Int -> [Int]
    conKsumas3PrimosDistintos k n = [ x | x <- [10..n] , k == length ( sumas3PrimosDistintos x) ]
    noSonSumas3PrimosDistintos :: Int -> [Int]
    noSonSumas3PrimosDistintos  = conKsumas3PrimosDistintos 0
  3. adogargon
    import Data.Numbers.Primes
     
    sumas3PrimosDistintos :: Int -> [(Int,Int,Int)]
    sumas3PrimosDistintos n | even n = [(n-k-2,k,2) | k <- (takeWhile (<n) primes) , isPrime (n-k-2), n-2 /= 2*k && n-k /=4 && n-k-2 > k ]
                            | otherwise = [(n-s-t,s,t) | s <-(takeWhile (<n) primes) , t <- (takeWhile (<n) primes) , t < s && isPrime (n-s-t) && n-s /= 2*t && n-s-t > s ]
     
    conKsumas3PrimosDistintos  :: Int -> Int -> [Int]
    conKsumas3PrimosDistintos n k = filter (x -> length (sumas3PrimosDistintos x)==n) [10..k]
     
    noSonSumas3PrimosDistintos :: Int -> [Int]
    noSonSumas3PrimosDistintos k = conKsumas3PrimosDistintos 0 k
  4. javmarcha1
    import Data.List
    import Data.Numbers.Primes
     
    sumas3PrimosDistintos :: Int -> [(Int,Int,Int)]
    sumas3PrimosDistintos x = reverse[(e,f,g) |
                              [e,f,g] <- nub [reverse(sort[a,b,c]) |
                                a <- (primosmenores x),
                                b <- (primosmenores x),
                                c <- (primosmenores x),
                                sum[a,b,c] == x,
                                a/=b && a/=c && b/=c]]
       where primosmenores y = [z | z <- [1..y], isPrime z]
     
    conKsumas3PrimosDistintos  :: Int -> Int -> [Int]
    conKsumas3PrimosDistintos x y = [z | z <- [10..y],
                                     length(sumas3PrimosDistintos z) == x]
     
    noSonSumas3PrimosDistintos :: Int -> [Int]
    noSonSumas3PrimosDistintos x = conKsumas3PrimosDistintos 0 x
  5. marlimand
    sumas3PrimosDistintos      :: Int -> [(Int,Int,Int)]
    sumas3PrimosDistintos n =nub [(x,y,z) | x<-[2..n],y<-[x..n],z<-[y..n],
                                  x/=y,y/=z,x/=z,isPrime x,
                               isPrime y, isPrime z, z+y+x==n]
     
    conKsumas3PrimosDistintos  :: Int -> Int -> [Int]
    conKsumas3PrimosDistintos k  n = [ x | x<-[1..n],
                                       length (sumas3PrimosDistintos x)==k]
     
    noSonSumas3PrimosDistintos :: Int -> [Int]
    noSonSumas3PrimosDistintos n = [x | x<-[11..n], null (sumas3PrimosDistintos x)]

Escribe tu solución

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