\. $n\$-perfekte Zahlen

Sep 14 2020

Eine positive ganze Zahl \$x\$ist ein \$n\$-perfekte Nummer wenn \$\sigma(x) = nx\$, wo \$\sigma(x)\$ist die Divisorsummenfunktion. Zum Beispiel \$120\$ist ein \$3\$-perfekte Zahl, weil seine Teiler zu \ summieren$360\$::

$$360 = 3\times120 = 1+2+3+4+5+6+8+10+12+15+20+24+30+40+60+120$$

und

$$926073336514623897600 = 6\times154345556085770649600 = 1+2+3+4+5+6+7+8+9+10+11+12+\dots+51448518695256883200+77172778042885324800+154345556085770649600$$

also \$154345556085770649600\$ist ein \$6\$-perfekte Nummer.

Sie müssen eine Ganzzahl \ nehmen$x\$als Eingabe und Ausgabe einen Wert \$n\$, so dass \$x\$ist ein \$n\$-perfekte Nummer. Wenn keine solche \$n\$Wenn vorhanden ist, können Sie einen beliebigen konsistenten Wert ausgeben, der keine positive Ganzzahl ist. Sie werden niemals eine Eingabe außerhalb der Grenzen Ihrer Sprache erhalten, aber Ihr Algorithmus muss für beliebig große \ funktionieren$x\$.

Dies ist Code-Golf, also gewinnt der kürzeste Code in Bytes.

Mini-Herausforderung: Schlage 5 Bytes in Jelly

Testfälle

    x -> n
    1 -> 1
    2 -> 0
    3 -> 0
    4 -> 0
    5 -> 0
    6 -> 2
   28 -> 2
  120 -> 3
  496 -> 2
  500 -> 0
  672 -> 3
30240 -> 4
154345556085770649600 -> 6

Antworten

9 Zgarb Sep 14 2020 at 11:28

Schale , 4 Bytes

¦¹ΣḊ

Probieren Sie es online aus!

Der letzte Testfall läuft ab.

Erläuterung

¦¹ΣḊ   Input is a number x.
   Ḋ   List of divisors.
  Σ    Sum.
¦      Division if divisible, 0 if not
 ¹     by x.

¦ ist normalerweise nur ein Teilbarkeitstest, aber hier ist sein Rückgabewert nützlich.

8 Sisyphus Sep 14 2020 at 10:59

Gelee , 5 Bytes

R×iÆs

Probieren Sie es online aus!

Erläuterung:

      - Explanation (sample for input 6)
R     - Range ([1, 2, 3, 4, 5, 6])
 ×    - Multiply by input ([6, 12, 18, 24, 30, 36])
   Æs - Divisor sum (12)
  i   - Index of divisor sum in list, else 0 (2)
7 xash Sep 14 2020 at 05:24

Brachylog , 6 Bytes

f+;?/ℕ

Probieren Sie es online aus!

Wie es funktioniert

f+;?/ℕ
f+     the sum of the factors
  ;?/ℕ divided by the input
     ℕ is a natural number

Alternative Version finde ich cooler, aber länger:

f+~×[?,.]∧
f+          the sum of the factors
  ~×        unifies with the multiplication of
    [?,.]   the input and the output
         ∧  return the output
6 Bismarck71 Sep 14 2020 at 14:36

05AB1E , 7 6 Bytes

Ý*IÑOk

Probieren Sie es online aus!

Erläuterung:

Ý*IÑOk>
Ý        0-Index inclusive range of input (6 -> [1, 2, 3, 4, 5, 6])
 *       Multiply by input ([6, 12, 18, 24, 30, 36])
  IÑO    Get input -> divisors -> sum (6 -> [1, 2, 3, 6] -> 12)
     k   0-Index of divisor-sum in array or -1 if not found. ([6, >12<, 18, 24, 30, 36] -> 1)

Ich habe gerade die Methode von Sisyphus angewendet. Dies könnte wahrscheinlich heruntergefahren oder sogar effizienter gemacht werden, aber mir fehlt das 05AB1E-Wissen, um dies zu tun. Ich dachte nur, ich würde es versuchen, um die Zeit zu vertreiben.

-1 Byte dank ovs

5 AZTECCO Sep 14 2020 at 07:30

C (gcc) , 47 Bytes

s,i;f(x){for(i=s=x;--i;)s+=x%i?0:i;s/=s%x*s+x;}

Probieren Sie es online aus!

Rückgabe noder 0.

5 JoKing Sep 14 2020 at 11:23

APL (Dyalog Unicode) , 16 15 13 Bytes

Dank Bubbler für den Hinweis kann ich das Ausgabeformat ändern, um ein paar Bytes zu sparen

⍸×∘⍳⍨=1⊥∘∪⊢∨⍳

Probieren Sie es online aus!

Gibt eine Singleton-Liste aus, nwenn nvorhanden, und ansonsten ein leeres Array. Findet den Index von ( ⍸), wobei die Summe von ( 1⊥) den Teilern ( ∪⊢∨⍳) gleich ( =) einem Vielfachen der Eingabe ( ×∘⍳⍨) ist. Ich verwende ⍸und =anstatt nur ⍳den Index zu finden, weil er eine leere Liste zurückgibt, wenn das Element nicht vorhanden ist, und nicht die Länge der Liste.

4 KevinCruijssen Sep 14 2020 at 16:17

Leerzeichen , 153 Bytes

[S S S N
_Push_0][S N
S _Duplicate_0][T   N
T   T   _Read_STDIN_as_integer][T   T   T   _Retrieve_input][S N
S _Duplicate_input][S N
S _Duplicate_input][N
S S N
_Create_Label_LOOP][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][N
T   S S N
_If_0_Jump_to_Label_REACHED_ZERO][S T   S S T   S N
_Copy_0-based_2nd_input][S T    S S T   N
_Copy_0-based_1st_integer][T    S T T   _Modulo][N
T   S T N
_If_0_Jump_to_Label_ADD_TO_SUM][N
S N
N
_Jump_to_Label_LOOP][N
S S T   N
_Create_Label_ADD_TO_SUM][S N
T   _Swap_top_two][S T  S S T   N
_Copy_0-based_1st_integer][T    S S S _Add_top_two][S N
T   _Swap_top_two][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_REACHED_ZERO][S N
N
_Discard_top][S N
S _Duplicate_top][S T   S S T   S N
_Copy_0-based_2nd_input][T  S T T   _Modulo][N
T   S S S N
_If_0_Jump_to_Label_DIVISIBLE][S S S N
_Push_0][N
S N
S T 
_Jump_to_Label_OUTPUT][N
S S S S N
_Create_Label_DIVISIBLE][S N
T   _Swap_top_two][T    S T S _Integer_divide_top_two][N
S S S T N
_Create_Label_OUTPUT][T N
S T _Output_as_integer]

Buchstaben S(Leerzeichen), T(Tabulator) und N(neue Zeile) werden nur als Hervorhebung hinzugefügt.
[..._some_action]nur als Erklärung hinzugefügt.

Probieren Sie es online aus (nur mit Leerzeichen, Tabulatoren und neuen Zeilen).

Erklärung im Pseudocode:

Integer input = STDIN as input
Integer sum = input
Integer i = input
Start LOOP:
  i = i - 1
  If(i == 0):
    Jump to Label REACHED_ZERO
  If(input % i == 0):
    sum = sum + i
  Go to next iteration of LOOP

Label REACHED_ZERO:
  Integer output
  If(sum % input == 0):
    output = sum integer-divided by input
  Else:
    output = 0

  Print output as integer to STDOUT

Beispiellauf: input = 6

Command    Explanation                       Stack         Heap   STDIN  STDOUT  STDERR

SSSN       Push 0                            [0]
SNS        Duplicate top (0)                 [0,0]
TNTT       Read STDIN as integer             [0]           {0:6}  6
TTT        Retrieve at address (0)           [6]           {0:6}
SNS        Duplicate top (6)                 [6,6]         {0:6}
SNS        Duplicate top (6)                 [6,6,6]       {0:6}
NSSN       Create Label LOOP                 [6,6,6]       {0:6}
 SSSTN     Push 1                            [6,6,6,1]     {0:6}
 TSST      Subtract top two (6-1)            [6,6,5]       {0:6}
 SNS       Duplicate top (5)                 [6,6,5,5]     {0:6}
 NTSSN     If 0: Jump to Label REACHED_ZERO  [6,6,5]       {0:6}
 STSSTSN   Copy 0-based 2nd (6)              [6,6,5,6]     {0:6}
 STSSTN    Copy 0-based 1st (5)              [6,6,5,6,5]   {0:6}
 TSTT      Modulo top two (6%5)              [6,6,5,1]     {0:6}
 NTSTN     If 0: Jump to Label ADD_TO_SUM    [6,6,5]       {0:6}
 NSNN      Jump to Label LOOP                [6,6,5]       {0:6}

 SSSTN     Push 1                            [6,6,5,1]     {0:6}
 TSST      Subtract top two (5-1)            [6,6,4]       {0:6}
 SNS       Duplicate top (4)                 [6,6,4,4]     {0:6}
 NTSSN     If 0: Jump to Label REACHED_ZERO  [6,6,4]       {0:6}
 STSSTSN   Copy 0-based 2nd (6)              [6,6,4,6]     {0:6}
 STSSTN    Copy 0-based 1st (4)              [6,6,4,6,4]   {0:6}
 TSTT      Modulo top two (6%4)              [6,6,4,2]     {0:6}
 NTSTN     If 0: Jump to Label ADD_TO_SUM    [6,6,4]       {0:6}
 NSNN      Jump to Label LOOP                [6,6,4]       {0:6}

 SSSTN     Push 1                            [6,6,4,1]     {0:6}
 TSST      Subtract top two (4-1)            [6,6,3]       {0:6}
 SNS       Duplicate top (3)                 [6,6,3,3]     {0:6}
 NTSSN     If 0: Jump to Label REACHED_ZERO  [6,6,3]       {0:6}
 STSSTSN   Copy 0-based 2nd (6)              [6,6,3,6]     {0:6}
 STSSTN    Copy 0-based 1st (3)              [6,6,3,6,3]   {0:6}
 TSTT      Modulo top two (6%3)              [6,6,3,0]     {0:6}
 NTSTN     If 0: Jump to Label ADD_TO_SUM    [6,6,3]       {0:6}
 NSSTN     Create Label ADD_TO_SUM           [6,6,3]       {0:6}
  SNT      Swap top two                      [6,3,6]       {0:6}
  STSSTN   Copy 0-based 1st (3)              [6,3,6,3]     {0:6}
  TSSS     Add top two (6+3)                 [6,3,9]       {0:6}
  SNT      Swap top two                      [6,9,3]       {0:6}
  NSNN     Jump to Label LOOP                [6,9,3]       {0:6}

 SSSTN     Push 1                            [6,9,3,1]     {0:6}
 TSST      Subtract top two (3-1)            [6,9,2]       {0:6}
 SNS       Duplicate top (2)                 [6,9,2,2]     {0:6}
 NTSSN     If 0: Jump to Label REACHED_ZERO  [6,9,2]       {0:6}
 STSSTSN   Copy 0-based 2nd (6)              [6,9,2,6]     {0:6}
 STSSTN    Copy 0-based 1st (5)              [6,9,2,6,2]   {0:6}
 TSTT      Modulo top two (6%5)              [6,9,2,0]     {0:6}
 NTSTN     If 0: Jump to Label ADD_TO_SUM    [6,9,2]       {0:6}
  SNT      Swap top two                      [6,2,9]       {0:6}
  STSSTN   Copy 0-based 1st (2)              [6,2,9,2]     {0:6}
  TSSS     Add top two (9+2)                 [6,2,11]      {0:6}
  SNT      Swap top two                      [6,11,2]      {0:6}
  NSNN     Jump to Label LOOP                [6,11,2]      {0:6}

 SSSTN     Push 1                            [6,11,2,1]    {0:6}
 TSST      Subtract top two (2-1)            [6,11,1]      {0:6}
 SNS       Duplicate top (1)                 [6,11,1,1]    {0:6}
 NTSSN     If 0: Jump to Label REACHED_ZERO  [6,11,1]      {0:6}
 STSSTSN   Copy 0-based 2nd (6)              [6,11,1,6]    {0:6}
 STSSTN    Copy 0-based 1st (1)              [6,11,1,6,1]  {0:6}
 TSTT      Modulo top two (6%1)              [6,11,1,0]    {0:6}
 NTSTN     If 0: Jump to Label ADD_TO_SUM    [6,11,1]      {0:6}
  SNT      Swap top two                      [6,1,11]      {0:6}
  STSSTN   Copy 0-based 1st (1)              [6,1,11,1]    {0:6}
  TSSS     Add top two (11+1)                [6,1,12]      {0:6}
  SNT      Swap top two                      [6,12,1]      {0:6}
  NSNN     Jump to Label LOOP                [6,12,1]      {0:6}

 SSSTN     Push 1                            [6,12,1,1]    {0:6}
 TSST      Subtract top two (1-1)            [6,12,0]      {0:6}
 SNS       Duplicate top (1)                 [6,12,0,0]    {0:6}
 NTSSN     If 0: Jump to Label REACHED_ZERO  [6,12,0]      {0:6}
 NSSSN     Create Label REACHED_ZERO         [6,12,0]      {0:6}
  SNN      Discard top (0)                   [6,12]        {0:6}
  SNS      Duplicate top (12)                [6,12,12]     {0:6}
  STSSTSN  Copy 0-based 2nd (6)              [6,12,12,6]   {0:6}
  TSTT     Modulo top two (12%6)             [6,12,0]      {0:6}
  NTSSSN   If 0: Jump to Label DIVISIBLE     [6,12]        {0:6}
  NSSSSN   Create Label DIVISIBLE            [6,12]        {0:6}
   SNT     Swap top two                      [12,6]        {0:6}
   TSTS    Integer-divide top two (12/6)     [2]           {0:6}
   NSSSTN  Create Label OUTPUT               [2]           {0:6}
    TNST   Output top as integer (2)         []            {0:6}         2
                                                                                 error

Stoppt nach dem Drucken des Ergebnisses mit einem Fehler, da kein Exit definiert ist.

4 Mukundan314 Sep 14 2020 at 09:38

Pyth , 15 Bytes

&!%Jsf!%QTSQQ/J

Probieren Sie es online aus!

Erläuterung

&!%Jsf!%QTSQQ/J
   J              # set J to
    s             # sum of
     f    SQ      # filtering the range [1, input] with
      !%QT        # lambda T: not (input % T)    (divisibility test)
                  # implicit print the
&                 # short-circuiting and of
 !%J        Q     # not (J % input)
             /J   # and J / input
3 Arnauld Sep 14 2020 at 04:59

JavaScript (ES6), 41 Byte

Gibt 0 zurück, wenn es keine Lösung gibt.

x=>(g=k=>x=k&&k*!(x%k)/x+g(k-1))(x)%1?0:x

Probieren Sie es online aus!

3 JonathanAllan Sep 14 2020 at 05:22

Gelee , 6 Bytes

Æs0:%?

Eine monadische Verbindung, die eine positive ganze Zahl akzeptiert, die eine nicht negative ganze Zahl ergibt.

Probieren Sie es online aus! Oder sehen Sie sich die Testsuite an .

Wie?

Æs0:%? - Link: x
Æs     - divisor sum
     ? - if...
    %  - ...condition: has a remainder when divided
  0    - ...then: zero
    :  - ...else: integeger divide
3 Razetime Sep 14 2020 at 11:22

APL (Dyalog Unicode) , 19 18 Bytes

⊢(÷⍨×0=|)1⊥∘⍸0=⍳|⊢

Probieren Sie es online aus!

Umstellung auf Zug von Jo King. (- 3 Bytes)

-1 weiteres Byte von Jo King nach Änderung der Prüfbedingung.

Ältere Antwort, 22 Bytes

{(⊢×⌊=⊢)⍵÷⍨+/⍸0=⍵|⍨⍳⍵}

Erläuterung

{(⊢×⌊=⊢)⍵÷⍨+/⍸0=⍵|⍨⍳⍵} ⍵ → input
                   ⍳⍵  range 1-⍵
                ⍵|⍨    mod ⍵
              0=       check which ones are divisors
             ⍸         get the indices (factors)
           +/          sum the factors
        ⍵÷⍨            divide by ⍵
 (⊢×⌊=⊢)               Inner tacit fn:
    ⌊=⊢                Floor equals right? (integer test, returns 0 or 1)
  ⊢×                   times right 
3 ovs Sep 14 2020 at 06:15

Haskell , 51 46 Bytes

a!b=0^mod a b*div a b
f n=sum(map(n!)[1..n])!n

Probieren Sie es online aus!

3 J42161217 Sep 14 2020 at 06:24

Wolfram Language (Mathematica) , 30 Bytes

Tr@Divisors@#/#/._Rational->0&

Probieren Sie es online aus!

-6 Bytes von @att

3 Neil Sep 14 2020 at 05:55

Holzkohle , 23 20 Bytes

NθI⌕E⊕θ×θιΣΦ⊕θ∧ι¬﹪θι

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Port des @ Sisyphus-Algorithmus, aber Verwendung des Kommentars von @ ovs, um die 0-Indizierung zu behandeln. Ausgaben -1für Nichtexistenz. Erläuterung:

Nθ                      Input `x` as a number
             θ          `x`
            ⊕           Incremented
           Φ            Filter over implicit range
               ι        Current index
              ∧         Logical AND
                  θ     `x`
                 ﹪      Modulo
                   ι    Current index
                ¬       Logical NOT
          Σ             Take the sum
      θ                 `x`
     ⊕                  Incremented
    E                   Map over implicit range
        θ               `x`
       ×                Multiplied by
         ι              Current index
   ⌕                    Find the index
  I                     Cast to string
                        Implicitly print

Leider ist für Charcoal die Summe von []nicht Null, was bedeutet, dass ich kein Byte speichern kann, indem ich die beiden Inkremente von entferne xund stattdessen das Ergebnis inkrementiere.

Vorherige 23-Byte-Lösung:

Nθ≔ΣΦ⊕θ∧ι¬﹪θιη¿¬﹪ηθI÷ηθ

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:

Nθ

Eingabe x.

≔ΣΦ⊕θ∧ι¬﹪θιη

Erstellen Sie eine Liste aus 1..x, filtern Sie Zahlen heraus, die sich nicht teilen x, und nehmen Sie die Summe.

¿¬﹪ηθI÷ηθ

Wenn xdie Summe geteilt wird, drucken Sie den Quotienten.

3 DominicvanEssen Sep 14 2020 at 14:55

R , 42 41 39 Bytes

Bearbeiten: -1 Byte (und, inspiriert davon, -2 weitere Bytes) dank Robin Ryder

function(x)(d=sum(1:x*!x%%1:x))/x*!d%%x

Probieren Sie es online aus!

Kommentiert:

perfect_n=
function(x)
 (d=            # d is the divisor sum, calculated as...
  sum(          # sum of...
   1:x*         # the values of 1..x that have...
    !           # zero values for...
     x%%1:x)    # x MOD 1..x
  )
 )/x            # output d/x...
    *!d%%x      # but only if it's an integer 
                # (so d MOD x == 0)
2 user Sep 14 2020 at 05:38

Scala, 54 53 Bytes

x=>{val s=1 to x filter(x%_<1)sum;s/x*(1-(s%x).sign)}

Probieren Sie es in Scastie

Summiert jeden Teiler xvon 1 bis einschließlich x. Wenn diese Summe durch x teilbar ist, wird die durch x geteilte zurückgegeben, andernfalls wird 0 zurückgegeben.

2 Neil Sep 14 2020 at 06:05

Netzhaut , 51 Bytes

.+
*
|""Lw`^(.+)(?=\1*$) ^ $-1;
L$`^(.+);(\1)+$
$#2

Probieren Sie es online aus! Link enthält weniger langsame Testfälle. Erläuterung:

.+
*

Konvertieren Sie die Eingabe in unär.

|""Lw`^(.+)(?=\1*$)

Listen Sie alle Faktoren auf, ohne sie abzugrenzen, und summieren Sie sie so.

^
$-1;

Rufen Sie den ursprünglichen unären Wert ab.

L$`^(.+);(\1)+$ $#2

Zählen Sie, wie oft die Summe geteilt wird. (Oder nichts ausgeben, wenn dies nicht der Fall ist.)

2 LuisMendo Sep 14 2020 at 06:33

Oktave , 36 34 Bytes

@(x)~mod(s=~mod(x,r=1:x)*r',x)*s/x

Anonyme Funktion, die eine Gleitkomma- oder Ganzzahl als Eingabe verwendet. Der letzte Testfall schlägt aufgrund von Speicherbeschränkungen fehl.

Probieren Sie es online aus! Oder überprüfen Sie Testfälle .

Erläuterung

@(x)~mod(s=~mod(x,r=1:x)*r',x)*s/x

@(x)                                 % anonymous function with input x
                    1:x              % row vector [1 2 ... x]
                  r=                 % call that r
            mod(x,     )             % x modulo [1 2 ... x]. Gives a row vector
           ~                         % negate each element. Gives 1 for divisors
                         r'          % column vector [1; 2; ... ; x]
                        *            % matrix-multiply. Gives the sum of divisors
         s=                          % call that s
     mod(                  ,x)       % sum of divisors modulo x
    ~                                % negate. Gives 1 if x divides sum of divisors
                               s/x   % sum of divisors divided by x
                              *      % multiply
2 Mukundan314 Sep 14 2020 at 12:10

Python 3.8 (Vorabversion) , 62 Byte

lambda x:(a:=sum(x/i*(x%i<1)for i in range(1,x+1)))%x<1and a/x

Probieren Sie es online aus!

2 KevinCruijssen Sep 14 2020 at 17:29

MathGolf , 7 Bytes

─Σk‼÷/*

Probieren Sie es online aus.

Erläuterung:

─       # Get the divisors of the (implicit) input-integer
 Σ      # Sum those divisors
  k     # Push the input-integer again
   ‼    # Apply the following two commands separately to the stack:
    ÷   #  Check if the divisor-sum is divisible by the input (1 if truthy; 0 if falsey)
    /   #  Integer-divide the divisor-sum by the input
     *  # Multiply the two together
        # (after which the entire stack joined together is output implicitly as result)
2 Shaggy Sep 14 2020 at 18:22

Rockstar , 141 135 131 Bytes

Gibt nichts aus, wenn kein nvorhanden ist.

listen to N
X's0
T's0
while N-X
let X be+1
let D be N/X
turn up D
let T be+D is N/X and X

let D be T/N
turn up D
if D is T/N
say D

Probieren Sie es hier aus (Code muss eingefügt werden)

1 GalenIvanov Sep 14 2020 at 13:51

Symbol , 67 Bytes

procedure f(n)
s:=0
n%(i:=1to n)=0&s+:=i&\z
return(0=s%n&s/n)|0
end

Probieren Sie es online aus!

1 Shaggy Sep 14 2020 at 14:00

Japt -æ , 7 Bytes

Gibt aus, undefinedwenn nein ngefunden wird.

*N¶Îâ x

Versuch es

1 GalenIvanov Sep 14 2020 at 14:17

Faktor 84 Bytes

: f ( n -- n ) dup [1,b] [ dupd mod 0 = ] filter sum swap /mod 0 > [ drop 0 ] when ;

Probieren Sie es online aus!

1 user Sep 15 2020 at 02:19

Prolog, 117 Bytes

s(X,D,S):-D<1,!,S is 0;E is D-1,(0 is X mod D,!,s(X,E,T),S is T+D;s(X,E,S)).
f(X,N):-s(X,X,S),0 is S mod X,N is S//X.

Probieren Sie es online aus! (Bitte ändern Sie es nicht direkt, es würde auch meine Version ändern)


Wenn jemand herausfinden könnte, warum diese kürzere Version (96 Bytes) nicht funktioniert, wäre ich wirklich dankbar.

s(X,D,S):-D<1,!,S is 0;E is D-1,(0 is X mod D,!,s(X,E,T),S is T+D;s(X,E,S)).
f(X,N):-s(X,X,N*X).

Version mit Print-Debugging

1 2014MELO03 Sep 17 2020 at 02:48

GolfScript , 22 Bytes

~:x),{.x\%!*+}*.x%!*x/

Probieren Sie es online aus!

~:x                     # Store the input in x
   ),                   # Make an array from 0 to x
     {       }*         # For each number in the array, execute this block
      .                 # Copy current number
       x\%!             # The copy becomes 1 if it is a divisor of x and 0 if it isn't
           *+           # Multiply and add
               .        # Copy the sum of the divisors
                x%!     # The copy becomes 1 if it is a divisor of x and 0 if it isn't
                   *    # Multiply
                    x/  # Divide by x