Simplifica una raíz cuadrada


29

Dado un número entero positivo n, simplifique la raíz cuadrada √nen la forma a√bextrayendo todos los factores cuadrados. Los resultados a,bdeben ser enteros positivos n = a^2 * bcon el bmenor tamaño posible.

Puede imprimir ay ben cualquier orden en cualquier formato razonable. No puede omitir salidas 1como implícitas.

Las salidas para n=1..36como (a,b):

1 (1, 1)
2 (1, 2)
3 (1, 3)
4 (2, 1)
5 (1, 5)
6 (1, 6)
7 (1, 7)
8 (2, 2)
9 (3, 1)
10 (1, 10)
11 (1, 11)
12 (2, 3)
13 (1, 13)
14 (1, 14)
15 (1, 15)
16 (4, 1)
17 (1, 17)
18 (3, 2)
19 (1, 19)
20 (2, 5)
21 (1, 21)
22 (1, 22)
23 (1, 23)
24 (2, 6)
25 (5, 1)
26 (1, 26)
27 (3, 3)
28 (2, 7)
29 (1, 29)
30 (1, 30)
31 (1, 31)
32 (4, 2)
33 (1, 33)
34 (1, 34)
35 (1, 35)
36 (6, 1)

Estos son OEIS A000188 y A007913 .

Relacionado: Una versión más compleja .


Hemos tenido esto antes , y eso se cerró como un duplicado del desafío vinculado aquí.
flawr

Respuestas:


13

Jalea , 9 bytes

ÆE;0d2ZÆẸ

Pruébalo en línea! o verificar todos los casos de prueba .

Cómo funciona

ÆE;0d2ZÆẸ  Main link. Argument: n

ÆE         Exponents; generate the exponents of n's prime factorization.
  ;0       Append 0 since 1ÆE returns [].
    d2     Divmod by 2.
      Z    Zip/transpose to group quotients and remainders.
       ÆẸ  Unexponent; turn the exponents of prime factorizations into integers.

3
En UTF-8, lo es, pero Jelly usa una página de códigos personalizada. El enlace de bytes en el encabezado apunta a él.
Dennis

Que publique el comentario mucho, así que tal vez debería hacer que los bytes como más clara (por ejemplo: [bytes](link-to-byes) (not UTF-8).
NoOneIsHere

12

PARI / GP, 12 bytes

n->core(n,1)

coredevuelve la parte de squarefree de nforma predeterminada, pero establecer el segundo indicador de argumento en 1 hace que devuelva ambas partes. El orden de salida es (b, a), por ejemplo (n->core(n,1))(12) -> [3, 2].



6

MATL , 12 bytes

t:U\~f0)GyU/

Pruébalo en línea!

Explicación

t     % Take input n implicitly. Duplicate
:U    % Push [1 4 9 ... n^2]
\~    % True for entries that divide the input
f0)   % Get (1-based) index of the last (i.e. largest) dividing number
G     % Push input again
y     % Duplicate index of largest dividing number
U     % Square to recover largest dividing number
/     % Divide input by that. Implicitly display stack


2

Mathematica 34 bytes

#/.{a_ b_^_:>{a, b},_[b_,_]:>{1,b}}&

Esto dice reemplazar toda la entrada ( #) de acuerdo con las siguientes reglas: (1) un número, a , multiplicado por la raíz cuadrada de b debe reemplazarse por {a, b} y una función b a la potencia de lo que sea que deba reemplazarse por {1, b }. Tenga en cuenta que la función asume que la entrada tendrá la forma Sqrt[n],. No funcionará con otros tipos de entrada.

Esta función sin nombre es inusualmente críptica para Mathematica. Puede aclararse un poco mostrando su forma completa, seguido de reemplazos de las formas más cortas originales.

Function[
   ReplaceAll[
      Slot[1],
      List[
         RuleDelayed[Times[Pattern[a,Blank[]],Power[Pattern[b,Blank[]],Blank[]]],List[a,b]],
         RuleDelayed[Blank[][Pattern[b,Blank[]],Blank[]],List[1,b]]]]]

que es lo mismo que

   ReplaceAll[
      #,
      List[
         RuleDelayed[Times[Pattern[a,Blank[]],Power[Pattern[b,Blank[]],Blank[]]],List[a,b]],
         RuleDelayed[Blank[][Pattern[b,Blank[]],Blank[]],List[1,b]]]]&

y

ReplaceAll[#, 
  List[RuleDelayed[
    Times[Pattern[a, Blank[]], 
     Power[Pattern[b, Blank[]], Blank[]]], {a, b}], 
   RuleDelayed[Blank[][Pattern[b, Blank[]], Blank[]], {1, b}]]] &

y

ReplaceAll[#, 
  List[RuleDelayed[Times[a_, Power[b_, _]], {a, b}], 
   RuleDelayed[Blank[][b_, _], {1, b}]]] &

y

ReplaceAll[#, {RuleDelayed[a_*b^_, {a, b}], RuleDelayed[_[b_, _], {1, b}]}]&

y

ReplaceAll[#, {a_*b^_ :> {a, b}, _[b_, _] :> {1, b}}] &


1

Matlab, 51 bytes

x=input('');y=1:x;z=y(~rem(x,y.^2));a=z(end)
x/a^2

Explicación

x=input('')       -- takes input
y=1:x             -- numbers from 1 to x
z=y(~rem(x,y.^2)) -- numbers such that their squares divide x
a=z(end)          -- biggest such number (first part of output)
x/a^2             -- remaining part


1

Haskell, 43> 42 bytes

Solución de fuerza bruta.

Guardado 1 byte gracias a Xnor

f n=[(x,y)|y<-[1..],x<-[1..n],x*x*y==n]!!0

Buena solución, me gusta cómo no usa modo div. Creo que puedes hacerlo y<-[1..]debido a la pereza.
xnor

Sí, tiene usted razón. No fue posible con mi primera solución, last[(x,y)|x<-[1..n],y<-[1..n],x*x*y==n]pero ahora funcionará. Gracias. ¿Tienes tu propia solución en Haskell?
Damien

1

05AB1E, 14 bytes

Lv¹ynÖi¹yn/y‚ï

Explicado

Lv              # for each x in range(1,N) inclusive
  ¹ynÖi         # if N % x^2 == 0
       ¹yn/y‚ï  # create [N/x^2,x] pairs, N=12 -> [12,1] [3,2]
                # implicitly output last found pair

Pruébalo en línea


1

Python, 74 bytes

def e(k):a=filter(lambda x:k/x**2*x*x==k,range(k,0,-1))[0];return a,k/a**2

Lo suficientemente directo.


0

Python 2.7 (sin golf) - 181 Bytes

def e(n):   
 for x in range(1,n+1):
  r=(1,x)
  for i in range(1,x+1):
   l=i**.5
   for j in range(1,x+1): 
    if i*j==x and l%1==0 and j<r[1]:r=(int(l),j)                
  print x,r

Ejecutar como: e (número) ej. e (24)

Salida de muestra:

>> e(24)
1 (1, 1)
2 (1, 2)
3 (1, 3)
4 (2, 1)
5 (1, 5)
6 (1, 6)
7 (1, 7)
8 (2, 2)
9 (3, 1)
10 (1, 10)
11 (1, 11)
12 (2, 3)
13 (1, 13)
14 (1, 14)
15 (1, 15)
16 (4, 1)
17 (1, 17)
18 (3, 2)
19 (1, 19)
20 (2, 5)
21 (1, 21)
22 (1, 22)
23 (1, 23)
24 (2, 6)

1
Por favor, intente jugar su respuesta lo más posible, este es un código de golf
caird coinheringaahing

0

APL, 25 caracteres

 {(⊢,⍵÷×⍨)1+⍵-0⍳⍨⌽⍵|⍨×⍨⍳⍵}

En inglés:

  • 0⍳⍨⌽⍵|⍨×⍨⍳⍵: índice del mayor de los cuadrados hasta n que divide completamente n;
  • 1+⍵-: el índice está en la matriz invertida, así que ajuste el índice
  • (⊢,⍵÷×⍨): produce el resultado: el índice en sí (a) y el cociente b (es decir, n ÷ a * a)

Prueba:

     ↑{(⊢,⍵÷×⍨)⊃z/⍨0=⍵|⍨×⍨z←⌽⍳⍵}¨⍳36
1  1
1  2
1  3
2  1
1  5
1  6
1  7
2  2
3  1
1 10
1 11
2  3
1 13
1 14
1 15
4  1
1 17
3  2
1 19
2  5
1 21
1 22
1 23
2  6
5  1
1 26
3  3
2  7
1 29
1 30
1 31
4  2
1 33
1 34
1 35
6  1

0

JavaScript (ECMAScript 6), 35 bytes

f=(n,k=n)=>n/k%k?f(n,--k):[k,n/k/k]

JavaScript 1+, 37 B

for(k=n=prompt();n/k%k;--k);[k,n/k/k]

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.