Movimientos bastante suaves

18

En aritmética, un número n-liso , donde n es un número primo dado, se define matemáticamente como un número entero positivo que no tiene factores primos mayores que n. Por ejemplo, 42 es 7-liso porque todos sus factores primos son menores o iguales a 7, pero 44 no es 7-liso porque también tiene 11 como factor primo.

Defina un número bastante suave como un número sin factores primos mayores que su propia raíz cuadrada. Por lo tanto, la lista de números bastante suaves puede formularse de la siguiente manera:

  • (¡EDITADO!) 1 es un número bastante suave, debido a la falta total de factores primos. (Tenga en cuenta que en la versión original de esta pregunta, 1 fue excluido erróneamente de la lista, por lo que si lo excluye de sus resultados, no se marcará incorrectamente).
  • Entre 4 (= 2 2 ) y 8, los números bastante suaves son 2-suaves, lo que significa que tienen 2 como único factor primo.
  • Entre 9 (= 3 2 ) y 24, los números bastante suaves son 3-suaves, y pueden tener 2s y 3s en sus factorizaciones primas.
  • Entre 25 (= 5 2 ) y 48, los números bastante suaves son 5 suaves y pueden tener 2s, 3s y 5s en sus factorizaciones primas.
  • Y así sucesivamente, actualizar los criterios cada vez que se alcanza el cuadrado del siguiente número primo.

La lista de números bastante suaves es fija y comienza de la siguiente manera: 1, 4, 8, 9, 12, 16, 18, 24, 25, ...

Su reto es escribir el código que da salida a todos los números muy suave hasta e incluyendo 10 000 (= 100 2 ). Debe haber al menos un separador (no importa de qué tipo: espacio, coma, nueva línea, cualquier cosa) entre cada número en la lista y el siguiente, pero es completamente irrelevante qué carácter se utiliza.

Como de costumbre, el recuento de bytes más bajo gana, obviamente, simplemente generar la lista no será demasiado beneficioso para usted aquí. ¡Buena suerte!

A. Mirabeau
fuente
99
¿Por qué 1 no es bastante suave?
Dennis
¿Podemos mostrar la lista en orden inverso?
Leaky Nun
55
OEIS A048098 (incluye extra 1)
Leaky Nun
1
@Mego "No hay números bastante suaves menores que 4". Está bastante claro. No necesariamente obvio, pero definitivamente claro.
viraptor
1
@viraptor Se vota como no claro, no porque no se haya dicho que 1 no es fluido, sino porque su definición y su declaración de exclusión se contradicen entre sí.
Leaky Nun

Respuestas:

1

En realidad, 11 bytes

4╤R`;yM²≤`░

Pruébalo en línea!

No incluye 1.

Explicación:

4╤R`;yM²≤`░
4╤R          range(10**4)
   `;yM²≤`░  filter: take values where
    ;yM²       the square of the largest prime factor
        ≤      is less than or equal to the value
Mego
fuente
7

Jalea , 12 bytes

Æf>½S
³²ḊÇÐḟ

Pruébalo en línea!

Cómo funciona

³²ḊÇÐḟ  Main link. No arguments.

³       Yield 100.
 ²      Square it to yield 10,000.
  Ḋ     Dequeue; yield [2, ..., 10,000].
   ÇÐḟ  Filter-false; keep elements for which the helper link returns 0.

Æf>½S   Helper link. Argument: n

Æf      Compute the prime factorization of n.
  >½    Compare the prime factors with the square root of n.
    S   Sum; add the resulting Booleans.
Dennis
fuente
7

Brachylog , 21 19 bytes

1 byte gracias a Fatalize, por la inspiración de otro 1 byte.

100^:4reP$ph^<=P@w\

Pruébalo en línea!

Toma alrededor de 6 segundos aquí.

100^:4reP$ph^<=P@w\
100                      100
   ^                     squared
    :4                   [10000,4]
      r                  [4,10000]
       eP                P is an integer in that interval (choice point),
        P$ph^<=P         P, prime factorized (from biggest to smallest),
                         take the first element, squared, is less than
                         or equal to P
               P@w       Write P with a newline,
                  \      Backtrack to the last choice point and make
                         a different choice until there is no more
                         choice and the program halts.

Solución anterior de 21 bytes

100^:4reP'($pe^>P)@w\

Pruébalo en línea!

Toma alrededor de 6 segundos aquí.

100^:4reP'($pe^>P)@w\
100                      100
   ^                     squared
    :4                   [10000,4]
      r                  [4,10000]
       eP                P is an integer in that interval (choice point),
        P'(      )       The following about P cannot be proved:
           $pe               one of its prime factor
              ^              squared
               >P            is greater than P
                  @w     Write P with a newline,
                    \    Backtrack to the last choice point and make
                         a different choice until there is no more
                         choice and the program halts.
Monja permeable
fuente
100^:4reP$pot^<=P@w\es un byte más corto, aunque menos elegante.
Fatalize
@ Fatalize Gracias, jugué otro byte
Leaky Nun
4

Haskell, 53 bytes

r=[1..10^4]
[n|n<-r,product[x|x<-r,x*x<=n]^n`mod`n<1]

No tengo tiempo para jugar golf ahora, pero quiero ilustrar un método para probar si nes bastante sencillo : multiplique los números de 1a sqrt(n)(es decir, calcule un factorial), eleve el producto a una potencia alta y compruebe si el resultado es un múltiplo de n.

Cambie a r=[2..10^4]si 1no se debe generar.

xnor
fuente
No es que sea más golfista, pero estoy bastante seguro de que el cubo es suficiente (lo 8requiere).
Neil
2

Pyth , 16 15 bytes

1 byte gracias a Jakube.

tf!f>*YYTPTS^T4

Pruébalo en línea!

tf!f>*YYTPTS^T4
             T   10
            ^T4  10000
           S^T4  [1,2,3,...,10000]
 f               filter for elements as T for
                 which the following is truthy: 
         PT          prime factorization of T
   f                 filter for factor as Y:
     *YY                 Y*Y
    >   T                greater than T ?
  !                  logical negation
t                remove the first one (1)
Monja permeable
fuente
¿Seguramente Pyth tiene una función cuadrada? Entonces, ¿puede reemplazar *dd con esa función?
Conor O'Brien
@ ConorO'Brien Nope, Pyth no tiene una función cuadrada.
Leaky Nun
eso parece una especie de descuido
Conor O'Brien
2

05AB1E, 16 14 13 bytes

4°L¦vyf¤yt›_—

Explicación

4°L¦v             # for each y in range 2..10000
      yf¤         # largest prime factor of y
         yt       # square root of y
           ›_     # less than or equal
             —    # if true then print y with newline

Pruébalo en línea

Emigna
fuente
es corto para 10000.
Adnan
@Adnan Gracias! Olvidé de eso.
Emigna
2

Matlab, 58 57 56 52 48 bytes

for k=1:1e4
if factor(k).^2<=k
disp‌​(k)
end
end

Para cada número, verifica si todos los factores al cuadrado no son mayores que el número mismo. En caso afirmativo, muestra ese número.

Gracias a @Luis Mendo por jugar este enfoque.


Otro enfoque (50 bytes):

n=1:10^4;for k=n
z(k)=max(factor(k))^2>k;end
n(~z)

Para cada número se calcula si su máximo factor primo al cuadrado es menor que el número mismo. Luego lo usa para indexar.

pajonk
fuente
1
Su enfoque anterior se puede acortar:for k=4:1e4,if factor(k).^2<=k,disp(k);end;end
Luis Mendo
1

SQF , 252 227 220

Formato de script estándar:

#define Q(A,B) for #A from 2 to B do{
Q(i,10000)if([i]call{params["j"];u=sqrt j;a=true;Q(k,u)a=a and((j%k!=0)or(j/k<u)or!([j/k]call{params["x"];q=true;Q(z,sqrt x)q=q and(x%z!=0)};q}))};a})then{systemChat format["%1",i]}}

Incluya el preprocesador en la cadena de compilación cuando llame, por ejemplo:

  • execVM "FILENAME.sqf"
  • call compile preprocessFile "FILENAME.sqf"

Esto escribe en el registro de Chat del sistema, que es lo más cercano que SQF tiene para stdout

Οurous
fuente
1

C, 113 bytes

#include<stdio.h>
main(a){for(;++a<10001;){int n=2,c=a;for(;n*n<=a;n++)while(c%n<1)c/=n;if(c<2)printf("%d ",a);}}

Ideone it!

Monja permeable
fuente
1

Pyke, 13 12 11 bytes

T4^S#DP#X<!

Pruébalo aquí!

(El enlace solo sube a 10 ^ 3 porque 10 ^ 4 se agota)

T4^S        -  one_range(10^4)
    #DP#X<! - filter_true(V, ^): (as i)
      P     -   factors(i)
       #X<! -  filter_true(V, ^):
        X   -   ^ ** 2
         <! -    not (i < ^)
Azul
fuente
1

J, 20 bytes

(#~{:@q:<:%:)2+i.1e4

Resultado:

   (#~{:@q:<:%:)2+i.1e4
4 8 9 12 16 18 24 25 27 30 32 36 40 45 48 49 50 54 56 60 63 64 70 72 75 80...

Pruébelo en línea aquí.

randomra
fuente
0

Python 2, 90 bytes

for i in range(4,10001):
 n=2;j=i
 while n*n<=j:
  while i%n<1:i/=n
  n+=1
 if i<2:print j

Ideone it!

Monja permeable
fuente
0

R, 97 bytes

b=F;for(j in 1:1e4){for(i in which(!j%%1:j)[-1])if(which(!i%%1:i)[2]==i)b=i<=j^0.5;if(b)print(j)}

sin golf

b <- F                               #Initializes
for (j in 1:1e4){                    #Loop across integers 1..10^4
    a <- which(!j%%1:j)[-1]          #Finds all factors
    for (i in a)                     #Loop across factors
         b <- which(!i%%1:i)[2]==i   #Tests primeness
         if(b) c <- i<=j^0.5         #If prime, tests smoothness
    if(c) print(j)                   #If biggest prime factor gives smooth
}                                    #result, Prints the number.
usuario5957401
fuente
0

Pyth, 12 bytes

g#^ePT2tS^T4

No incluye 1.

isaacg
fuente