Aquí hay una buena manera de girar todos los datos. Muestra todos los primos y todos los factores primos 2 * y y 3 * z para cada intervalo cuadrado:
– Columna 1 y 2: el par de cuadrados
– Columna 3: los números primos en el par
– Columna 4: los factores primos 2 *
– Columna 5: los factores primos 3 *
Agregué la salida CSV de 25 a 1000 como comentario (si alguien está interesado pero no quiere ejecutar el código o no tiene Excel).
” ” ” ” ” ” ” ” ” ” ” ”
‘Muestra todos los primos y 2 * y 3 * factores primos por intervalo cuadrado
‘© 2014 Michael M. Ross
” ” ” ” ” ” ” ” ” ” ” ”
‘Para usar este código VBA:
‘1. Comience con una hoja de cálculo de Excel vacía.
‘2. Pegue el código en la página “ThisWorkbook” del editor de Visual Basic.
‘3. Establecer valores mínimos y máximos.
‘(Si min> ~ 100000: formatee la primera columna como texto)
‘En Windows corre muy rápido; en Mac a paso de caracol para discapacitados.
Opción explícita
Sub LC privado ()
Dim n como doble, min como doble, max como doble
Dim nn1 como doble, nn2 como doble
Dim cp como doble
Dim pf2 como doble, pf3 como doble
Dim bl1 como booleano, bl2 como booleano, bl3 como booleano
Dim rw As Long
rw = 2
Con hojas de trabajo (1)
min = 5
max = 100
Si ModOp (min, 2) = 1 Entonces min = min + 1 ‘un número par
n = min
‘bucle externo
Hacer hasta n> max
nn1 = n * n
nn2 = (n + 1) * (n + 1)
‘bucles internos
nn1 = nn1 + 1
nn2 = nn2 – 1
Para cp = nn1 a nn2 Paso 1
.Cells (rw, 1) = Trim $ (nn1 – 1)
.Cells (rw, 2) = Trim $ (nn2 + 1)
If IsPrime (cp) Entonces
.Cells (rw, 3) = Recortar $ (cp)
‘nc = nc + 1
bl1 = verdadero
Terminara si
Si ModOp (cp, 2) = 0 Entonces
If IsPrime (cp / 2) Entonces
pf2 = cp / 2
bl2 = verdadero
Terminara si
Si pf2> 0 Entonces .Cells (rw, 4) = Trim $ (pf2)
pf2 = 0
Terminara si
Si ModOp (cp, 3) = 0 Entonces
If IsPrime (cp / 3) Entonces
pf3 = cp / 3
bl3 = verdadero
Terminara si
Si pf3> 0 Entonces .Cells (rw, 5) = Trim $ (pf3)
pf3 = 0
Terminara si
DoEvents
‘Si bl1 Entonces
‘nc = nc + 1
‘ Terminara si
Si bl1 o bl2 o bl3 entonces
rw = rw + 1
Terminara si
bl1 = falso
bl2 = falso
bl3 = falso
próximo
rw = rw + 2
n = n + 1
Lazo
Terminar con
End Sub
‘Función restante (módulo)
Función privada ModOp (v1 como doble, v2 como doble) como doble
Dim vr As Double
vr = v1 / v2
ModOp = vr – Int (vr)
Función final
‘Usar esto solo para fines de demostración con gemelos pequeños
Función privada IsPrime (pt como doble) como booleana
Dim ap como doble
Si pt <> 2 entonces
Si ModOp (pt, 2) = 0 Entonces
IsPrime = False
Función de salida
Terminara si
Para ap = 2 a Sqr (pt)
Si ModOp (pt, ap) = 0 Entonces
IsPrime = False
Función de salida
Terminara si
DoEvents
próximo
Terminara si
IsPrime = True
Función final
” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ‘ ‘
============================
Aquí hay una prueba rápida de cordura para Excel que muestra dos semiprimes por cada intervalo cuadrado perfecto. Solo busca X ^ 2 + Ns que sean divisibles sin resto por 2 o 3. Luego, el factor no trivial se prueba con primos. Ambos factores primos no triviales se representan en dos intervalos cuadrados anteriores diferentes (aunque este hecho aritmético no se prueba):
” ” ” ” ” ” ” ” ” ” ” ”
‘Conjetura de Legendre (no puede ser falsa)
‘Si siempre hay dos semiprimes de la forma 2 * y y 3 * z entre X ^ 2 y (X + 1) ^ 2
‘entonces una y y z distintas deben estar entre dos intervalos cuadrados perfectos anteriores y diferentes.
‘© 2014 Michael M. Ross
” ” ” ” ” ” ” ” ” ” ” ”
‘Para usar este código VBA:
‘1. Comience con una hoja de cálculo de Excel vacía.
‘2. Pegue el código en la página “ThisWorkbook” del editor de Visual Basic.
‘3. Establecer valores mínimos y máximos.
‘(Si min> ~ 100000: formatee la primera columna como texto)
‘En Windows corre muy rápido; en Mac a paso de caracol para discapacitados.
Opción explícita
Sub LC privado ()
Dim n como doble, min como doble, max como doble
Dim nn1 como doble, nn2 como doble
Dim cp como doble
Dim pf2 como doble, pf3 como doble
Dim bl2 como booleano, bl3 como booleano
Dim rw As Long
rw = 1
Con hojas de trabajo (1)
min = 5
max = 1000
Si ModOp (min, 2) = 1 Entonces min = min + 1 ‘un número par
n = min
‘bucle externo
Hacer hasta n> max
nn1 = n * n
nn2 = (n + 1) * (n + 1)
‘bucles internos
Para cp = nn1 + 1 a nn2 – 1
Si ModOp (cp, 2) = 0 Entonces
If IsPrime (cp / 2) Entonces
pf2 = cp / 2
bl2 = verdadero
Salir por
Terminara si
Terminara si
bl2 = falso
DoEvents
próximo
Para cp = nn1 + 1 a nn2 – 1
Si ModOp (cp, 3) = 0 Entonces
If IsPrime (cp / 3) Entonces
pf3 = cp / 3
bl3 = verdadero
Salir por
Terminara si
Terminara si
bl3 = falso
DoEvents
próximo
.Cells (rw, 1) = Trim $ (nn1)
.Cells (rw, 2) = Trim $ (nn2)
Si bl2 y bl3 entonces
.Cells (rw, 3) = “2 *” + Trim $ (pf2)
.Cells (rw, 4) = “3 *” + Trim $ (pf3)
Terminara si
Si bl2 = Verdadero y bl3 = Falso Entonces
.Cells (rw, 3) = “2 *” + Trim $ (pf2)
.Cells (rw, 4) = “3 *” + “Falso”
Terminara si
Si bl2 = falso y bl3 = verdadero entonces
.Cells (rw, 3) = “2 *” + “Falso”
.Cells (rw, 4) = “3 *” + Trim $ (pf3)
Terminara si
rw = rw + 1
n = n + 1
Lazo
Terminar con
End Sub
‘Función restante (módulo)
Función privada ModOp (v1 como doble, v2 como doble) como doble
Dim vr As Double
vr = v1 / v2
ModOp = vr – Int (vr)
Función final
‘Usar esto solo con fines de demostración
Función privada IsPrime (pt como doble) como booleana
Dim ap como doble
Si pt <> 2 entonces
Si ModOp (pt, 2) = 0 Entonces
IsPrime = False
Función de salida
Terminara si
Para ap = 2 a Sqr (pt)
Si ModOp (pt, ap) = 0 Entonces
IsPrime = False
Función de salida
Terminara si
DoEvents
próximo
Terminara si
IsPrime = True
Función final
” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ” ‘ ‘