Vereinfache eine Quadratwurzel


29

nVereinfachen Sie bei einer positiven ganzen Zahl die Quadratwurzel √nin der Form, a√bindem Sie alle quadratischen Faktoren extrahieren. Die Ausgabe a,bsollte positive ganze Zahlen n = a^2 * bmit bmöglichst kleinen Zahlen sein.

Sie können aund bin jeder Reihenfolge in jedem vernünftigen Format ausgeben . Sie dürfen Ausgaben von nicht 1als implizit auslassen .

Die Ausgänge für n=1..36als (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)

Dies sind OEIS A000188 und A007913 .

Verwandte: Eine komplexere Version .


Wir hatten das schon einmal und das wurde als Duplikat der hier verlinkten Herausforderung geschlossen.
Fehler

Antworten:


13

Gelee , 9 Bytes

ÆE;0d2ZÆẸ

Probieren Sie es online! oder überprüfen Sie alle Testfälle .

Wie es funktioniert

Æ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
In UTF-8 ist dies der Fall, aber Jelly verwendet eine benutzerdefinierte Codepage. Der Byte- Link im Header verweist darauf.
Dennis

Sie schreiben , dass Kommentar viel, vielleicht sollten Sie den Bytes wie deutlicher machen (zum Beispiel: [bytes](link-to-byes) (not UTF-8).
NoOneIsHere

12

PARI / GP, 12 Bytes

n->core(n,1)

coregibt nstandardmäßig den quadratfreien Teil von zurück, aber wenn Sie das zweite Argument-Flag auf 1 setzen, werden beide Teile zurückgegeben. Ausgabereihenfolge ist (b, a)z (n->core(n,1))(12) -> [3, 2].


11

Python 2, 43 Bytes

k=n=input()
while n%k**2:k-=1
print k,n/k/k

Teste es auf Ideone .


6

MATL , 12 Bytes

t:U\~f0)GyU/

Probieren Sie es online!

Erläuterung

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}}&

Dies besagt, dass alle Eingaben ( #) gemäß den folgenden Regeln ersetzt werden sollen: (1) eine Zahl, a , mal die Quadratwurzel von b , {a, b} und eine Funktion b nach der Potenz dessen, was durch {1, b ersetzt werden soll }. Beachten Sie, dass die Funktion davon ausgeht, dass die Eingabe von der Form sein wird,Sqrt[n] . Bei anderen Eingaben funktioniert dies nicht.

Diese unbenannte Funktion ist für Mathematica ungewöhnlich kryptisch. Es kann etwas klarer dargestellt werden, indem seine vollständige Form gezeigt wird, gefolgt von Ersetzungen der ursprünglichen kürzeren Formen.

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]]]]]

das ist das gleiche wie

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

und

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

und

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

und

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

und

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

Erläuterung

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

JavaScript (ECMAScript 2016), 40 Byte

n=>{for(k=n;n%k**2;k--);return[k,n/k/k]}

Grundsätzlich eine JavaScript-Portierung von Dennis 'Python 2-Antwort .

Probieren Sie es auf JSBin .

Hinweis: Es funktioniert nicht im strikten Modus, da kes nirgendwo initialisiert wird. Damit es im strengen Modus funktioniert, sollte k=nin der Schleife auf geändert werden let k=n.


1

Haskell, 43> 42 Bytes

Brute-Force-Lösung.

Dank Xnor 1 Byte gespeichert

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

Schöne Lösung, ich mag, wie es nicht verwendet mododer div. Ich denke, Sie können y<-[1..]aufgrund der Faulheit tun .
Xnor

Ja, du hast recht. Mit meiner ersten Lösung war das nicht möglich, last[(x,y)|x<-[1..n],y<-[1..n],x*x*y==n]aber jetzt wird es funktionieren. Vielen Dank. Haben Sie eine eigene Lösung in Haskell?
Damien

1

05AB1E, 14 Bytes

Lv¹ynÖi¹yn/y‚ï

Erklärt

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

Probieren Sie es online aus


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

Einfach genug.


0

Python 2.7 (ungolfed) - 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

Ausführen als: e (Nummer) zB. e (24)

Beispielausgabe:

>> 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
Bitte versuchen Golf Ihre Antwort so viel wie möglich, das ist ein Code-Golf
CAIRD coinheringaahing

0

APL, 25 Zeichen

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

Auf Englisch:

  • 0⍳⍨⌽⍵|⍨×⍨⍳⍵: Index des größten der Quadrate bis n, der vollständig n teilt;
  • 1+⍵-: Der Index befindet sich im umgekehrten Array. Passen Sie den Index an
  • (⊢,⍵÷×⍨): Erzeugt das Ergebnis: den Index selbst (a) und den Quotienten b (dh n n a * a)

Prüfung:

     ↑{(⊢,⍵÷×⍨)⊃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 Byte

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]

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.