6 votos

Hay un palíndromo prime $p>3$ que también es palíndromo en base $\ 5\ $?

Un primer $\ p\ $ se llama capicúa, si los dígitos en orden inverso dar el mismo primer. Para bases de $\ b=2,3,4\ $ , hay grandes ejemplos de palíndromo de los números primos que son también palíndromo en base $b$ , pero para $\ b=5\ $, sólo sé que el trivial de los números primos $\ p=2\ $ e $\ p=3\ $.

Hay un palíndromo prime $\ p>3\ $ que también es palíndromo en base $\ 5\ $ ?

Con esta rutina :

? z=5;for(a=1,10^10,u=digits(a);if(gcd(u[1],10)==1,for(b=0,9,n=a*10+b;forstep(k=l
ength(u),1,-1,n=n*10+u[k]);if(isprime(n)==1,v=digits(n,z);if(Vecrev(v)==v,print(
n))))))

podemos comprobar si una solución con $\ 21\ $ dígitos o menos existe.

La fuerza bruta fácilmente revela que no prime por debajo de $\ 11\ $ hace el trabajo, por lo que podemos suponer que el número de dígitos es impar y empezar con $\ 101\ $.

El programa genera los palíndromos y comprueba si hay una solución.

Corrí el programa con el límite de $\ 10^8\ $ sin resultado alguno, por lo que una solución debe tener más de $\ 17\ $ dígitos.

9voto

Peter Taylor Puntos 5221

Estás buscando un número $n$ que se ajusta a tres criterios:

  1. $n$ es un palíndromo en base $10$
  2. $n$ es un palíndromo en base $5$
  3. $n$ es un primer

Voy a empezar con un análisis heurístico de la situación.


Un número que, en base a$b$ es un palíndromo con $d$ dígitos es divisible por $b+1$ si $d$ es incluso. Por lo tanto podemos considerar como un primer filtro de los criterios:

  1. $n$ tiene un número impar de dígitos en base $10$
  2. $n$ tiene un número impar de dígitos en base $5$
  3. $n$ es un palíndromo en base $10$
  4. $n$ es un palíndromo en base $5$

Que ya es muy difícil de filtro: a $10^{17}$ sólo $47$ números de pasar:

1                  2                  3                  4
626                676                15751              18881
808656808          831333138          831868138          836131638
836181638          12114741121        12185058121        6105769675016
6643369633466      6648130318466      6694978794966      6982578752896
6989062609896      7730173710377      103191131191301    103824717428301
107745787547701    107793080397701    132412434214231    172102080201271
172849181948271    176071838170671    176265757562671    202304515403202
206725444527602    206903565309602    279119383911972    301537434735103
374476969674473    378573424375873    445336272633544    445384969483544
445389595983544    449488282884944    449933929339944    473643646346374
473696969696374    62596751915769526  67546323432364576

Podemos filtrar un número de los de ojo de no ser primos. Así que vamos a añadir un quinto criterio para el filtro:

  1. $n$ es impar
  2. $n$ tiene un número impar de dígitos en base $10$
  3. $n$ tiene un número impar de dígitos en base $5$
  4. $n$ es un palíndromo en base $10$
  5. $n$ es un palíndromo en base $5$

Es fácil enumerar los intervalos de la satisfacción de los tres primeros criterios. A continuación, podemos estimar para cada uno de los intervalos de la probabilidad de satisfacer la 4ª y 5ª criterios y la probabilidad de ser el primer ($\approx \frac{2}{\ln n}$ debido a que el primer criterio).

Pero el par de bases aquí es especial, y por lo que la probabilidad de ser palíndromo en las dos bases es definitivamente no es independiente. Específicamente, cada dígito menos significativo en base a$5$ corresponde a los dos dígitos menos significativos en base a$10$. Así que podemos tomar en cuenta y descartar grandes intervalos de números enteros.

Teniendo todo esto en cuenta, ignorando los números de un solo dígito, y sumar el total estimado de los primos de cruzar el umbral de un estimado de prime en el rango de $(4\times 5^{12},10^{9})$, el umbral de dos estimada de los números primos en el rango de $(10^{14}, 2\times 5^{20})$, y el límite de tres estimado de los números primos en el rango de $(2\times 5^{38} - 8\times 10^{26})$. Comprobar mis cálculos aquí.

Conclusión: probablemente hay primos que cumplen los criterios, pero que están mirando raro.


Buscar, creo que el mejor enfoque es el de extender la idea de que cada dígito menos significativo en base a$5$ corresponde a los dos dígitos menos significativos en base a$10$. De manera más general, cualquier $d$dígitos sufijo en base $10$ corresponde a un $d$dígitos sufijo en base $5$, y desde el reverso del sufijo le da el prefijo podemos hacer progresivo refinamiento de los intervalos.

He utilizado el siguiente código en C# para generar impar de longitud impar doble-palíndromos y, a continuación, realiza las pruebas de primalidad por separado:

using System;
using System.Collections.Generic;
using System.Numerics;

namespace Sandbox.DoublePalindromes
{
    // https://math.stackexchange.com/q/3209975
    class DoublePalindromeSearcher
    {
        private static DateTime _Start;

        public static void Main()
        {
            _Start = DateTime.UtcNow;
            Search(Base5(), Base10());
        }

        private static void Search(IEnumerable<PalindromeInterval> base5, IEnumerable<PalindromeInterval> base10)
        {
            var fives = base5.GetEnumerator();
            var tens = base10.GetEnumerator();
            if (!fives.MoveNext()) return;
            if (!tens.MoveNext()) return;
            while (true)
            {
                System.Diagnostics.Debug.Assert(tens.Current.AffixLength == fives.Current.AffixLength);
                if (fives.Current.Overlaps(tens.Current) && (tens.Current.Suffix % BigInteger.Pow(5, fives.Current.AffixLength) == fives.Current.Suffix))
                {
                    if (tens.Current.Upper == tens.Current.Lower + 1)
                    {
                        if (IsPalindrome(tens.Current.Lower, 5)) Console.WriteLine(tens.Current.Lower + " " + (DateTime.UtcNow - _Start).TotalSeconds);
                    }
                    else Search(fives.Current.Subdivide(), tens.Current.Subdivide());
                }

                var lowerUpper = BigInteger.Min(fives.Current.Upper, tens.Current.Upper);
                if (fives.Current.Upper == lowerUpper && !fives.MoveNext()) return;
                if (tens.Current.Upper == lowerUpper && !tens.MoveNext()) return;
            }
        }

        private static bool IsPalindrome(BigInteger n, BigInteger b)
        {
            var digits = new List<BigInteger>();
            while (n > 0)
            {
                digits.Add(n % b);
                n /= b;
            }

            for (int i = 0, j = digits.Count - 1; i < j; i++, j--)
            {
                if (digits[i] != digits[j]) return false;
            }
            return true;
        }

        private static IEnumerable<PalindromeInterval> Base10()
        {
            // Odd number of digits, avoiding evens and 5.
            var digits = new int[] { 1, 3, 7, 9 };

            for (int length = 3; ; length += 2)
            {
                foreach (var prefix in digits)
                {
                    yield return new PalindromeInterval(10, prefix, prefix, 1, length);
                }
            }
        }

        private static IEnumerable<PalindromeInterval> Base5()
        {
            // Odd number of digits.
            for (int length = 3; ; length += 2)
            {
                for (int prefix = 1; prefix < 5; prefix++)
                {
                    yield return new PalindromeInterval(5, prefix, prefix, 1, length);
                }
            }
        }
    }

    class PalindromeInterval
    {
        public PalindromeInterval(BigInteger @base, BigInteger prefix, BigInteger suffix, int affixLength, int length)
        {
            if (2 * affixLength > length + 1) throw new ArgumentOutOfRangeException();

            Base = @base;
            Prefix = prefix;
            Suffix = suffix;
            AffixLength = affixLength;
            Length = length;

            if (2 * AffixLength == Length + 1)
            {
                // The last digit of the prefix overlaps the first digit of the affix
                Lower = (Prefix - Prefix % Base) * BigInteger.Pow(Base, Length - AffixLength) + Suffix;
                Upper = Lower + 1;
            }
            else
            {
                Lower = Prefix * BigInteger.Pow(Base, Length - AffixLength) + Suffix;
                Upper = Lower + (BigInteger.Pow(Base, Length - 2 * AffixLength) - 1) * BigInteger.Pow(Base, AffixLength) + 1;
            }
        }

        public BigInteger Base { get; }
        public BigInteger Prefix { get; }
        public BigInteger Suffix { get; }
        public int AffixLength { get; }
        public int Length { get; }

        public BigInteger Lower { get; }
        public BigInteger Upper { get; }

        public bool Overlaps(PalindromeInterval that) => this.Lower <= that.Upper && that.Lower <= this.Upper;

        public IEnumerable<PalindromeInterval> Subdivide()
        {
            if (2 * (AffixLength + 1) > Length + 1) yield break;

            var offset = BigInteger.Pow(Base, AffixLength);
            for (int newDigit = 0; newDigit < Base; newDigit++)
            {
                yield return new PalindromeInterval(Base, Prefix * Base + newDigit, Suffix + newDigit * offset, AffixLength + 1, Length);
            }
        }

        public override string ToString() => $"[{Lower}, {Upper})";
    }
}

Después de 4121 segundos encontrado el siguiente número, que es el primer comprobar como prime:

$$7278175677249196711781595411145951871176919427765718727$$

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X