\ $n\$-số hoàn hảo

Sep 14 2020

Một số nguyên dương \$x\$là một \$n\$-số hoàn hảo nếu \$\sigma(x) = nx\$, ở đâu \$\sigma(x)\$là hàm tổng số chia. Ví dụ, \$120\$là một \$3\$-số hoàn hảo vì các ước của nó tổng bằng \$360\$:

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

và

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

vậy \$154345556085770649600\$là một \$6\$-số hoàn hảo.

Bạn phải lấy một số nguyên \$x\$dưới dạng đầu vào và đầu ra một giá trị \$n\$, như vậy \$x\$là một \$n\$-số hoàn hảo. Nếu không có \$n\$tồn tại, bạn có thể xuất ra bất kỳ giá trị nhất quán nào không phải là số nguyên dương. Bạn sẽ không bao giờ nhận được đầu vào bên ngoài giới hạn của ngôn ngữ của mình, nhưng thuật toán của bạn phải hoạt động với số lượng tùy ý \$x\$.

Đây là mã-gôn nên mã ngắn nhất tính bằng byte sẽ thắng.

Thử thách nhỏ: Đánh bại 5 byte trong Jelly

Các trường hợp thử nghiệm

    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

Trả lời

9 Zgarb Sep 14 2020 at 11:28

Husk , 4 byte

¦¹ΣḊ

Hãy thử nó trực tuyến!

Trường hợp thử nghiệm cuối cùng hết thời gian.

Giải trình

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

¦ thường chỉ là một phép thử chia hết, nhưng ở đây giá trị trả về của nó rất hữu ích.

8 Sisyphus Sep 14 2020 at 10:59

Thạch , 5 byte

R×iÆs

Hãy thử nó trực tuyến!

Giải trình:

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

f+;?/ℕ

Hãy thử nó trực tuyến!

Làm thế nào nó hoạt động

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

Phiên bản thay thế, tôi nghĩ là mát hơn, nhưng lâu hơn:

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 byte

Ý*IÑOk

Hãy thử nó trực tuyến!

Giải trình:

Ý*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)

Tôi chỉ sử dụng phương pháp của Sisyphus. Điều này có thể giảm hoặc thậm chí hiệu quả hơn, nhưng tôi thiếu kiến ​​thức 05AB1E để làm như vậy. Tôi chỉ nghĩ rằng tôi sẽ cho nó một cú đánh để vượt qua thời gian.

-1 Byte cảm ơn ovs

5 AZTECCO Sep 14 2020 at 07:30

C (gcc) , 47 byte

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

Hãy thử nó trực tuyến!

Trả lại nhoặc 0.

5 JoKing Sep 14 2020 at 11:23

APL (Dyalog Unicode) , 16 15 13 byte

Cảm ơn Bubbler đã chỉ ra rằng tôi có thể thay đổi định dạng đầu ra để tiết kiệm một vài byte

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

Hãy thử nó trực tuyến!

Xuất ra một danh sách đơn về nthời điểm ntồn tại và một mảng trống. Tìm chỉ số của ( ⍸) trong đó tổng của ( 1⊥) các ước số ( ∪⊢∨⍳) bằng ( =) bội số của đầu vào ( ×∘⍳⍨). Tôi sử dụng ⍸và =thay vì chỉ ⍳để tìm chỉ mục vì nó trả về một danh sách trống khi phần tử không có ở đó thay vì độ dài của danh sách.

4 KevinCruijssen Sep 14 2020 at 16:17

Khoảng trắng , 153 byte

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

Các chữ cái S(khoảng trắng), T(tab) và N(dòng mới) chỉ được thêm vào dưới dạng tô sáng.
[..._some_action]chỉ được thêm vào như là lời giải thích.

Hãy thử trực tuyến (chỉ với khoảng trắng, tab và dòng mới).

Giải thích bằng mã giả:

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

Chạy ví dụ: 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

Dừng với lỗi sau khi in kết quả, vì không có lối thoát nào được xác định.

4 Mukundan314 Sep 14 2020 at 09:38

Pyth , 15 byte

&!%Jsf!%QTSQQ/J

Hãy thử nó trực tuyến!

Giải trình

&!%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

Trả về 0 nếu không có giải pháp.

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

Hãy thử nó trực tuyến!

3 JonathanAllan Sep 14 2020 at 05:22

Thạch , 6 byte

Æs0:%?

Một Liên kết đơn nguyên chấp nhận một số nguyên dương tạo ra một số nguyên không âm.

Hãy thử nó trực tuyến! Hoặc xem bộ thử nghiệm .

Làm sao?

Æ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 byte

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

Hãy thử nó trực tuyến!

Chuyển đổi sang đào tạo bởi Jo King. (- 3 byte)

-1 byte khác từ Jo King sau khi thay đổi điều kiện kiểm tra.

Câu trả lời cũ hơn, 22 byte

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

Giải trình

{(⊢×⌊=⊢)⍵÷⍨+/⍸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 byte

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

Hãy thử nó trực tuyến!

3 J42161217 Sep 14 2020 at 06:24

Ngôn ngữ Wolfram (Mathematica) , 30 byte

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

Hãy thử nó trực tuyến!

-6 byte từ @att

3 Neil Sep 14 2020 at 05:55

Than củi , 23 20 byte

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

Hãy thử nó trực tuyến! Liên kết là phiên bản dài của mã. Cổng thuật toán của @ Sisyphus nhưng sử dụng nhận xét của @ ovs để giải quyết việc lập chỉ mục 0. Đầu ra -1cho sự không tồn tại. Giải trình:

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

Thật không may cho Charcoal, tổng của []không phải là 0, có nghĩa là tôi không thể lưu một byte bằng cách xóa hai gia số của xvà thay vào đó tăng dần kết quả.

Giải pháp 23 byte trước đó:

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

Hãy thử nó trực tuyến! Liên kết là phiên bản dài của mã. Giải trình:

Nθ

Đầu vào x.

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

Tạo danh sách từ 1..x, lọc ra các số không chia xvà lấy tổng.

¿¬﹪ηθI÷ηθ

Nếu xchia tổng thì in ra thương.

3 DominicvanEssen Sep 14 2020 at 14:55

R , 42 41 39 byte

Chỉnh sửa: -1 byte (và, lấy cảm hứng từ điều này, thêm -2 byte nữa) nhờ Robin Ryder

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

Hãy thử nó trực tuyến!

Đã nhận xét:

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 byte

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

Hãy thử nó trong Scastie

Tính tổng mọi ước số xtừ 1 đến x, bao gồm cả. Nếu tổng đó chia hết cho x, nó sẽ trả về số chia cho x, ngược lại nó trả về 0.

2 Neil Sep 14 2020 at 06:05

Retina , 51 byte

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

Hãy thử nó trực tuyến! Liên kết bao gồm ít trường hợp thử nghiệm chậm hơn. Giải trình:

.+
*

Chuyển đổi đầu vào thành một ngôi.

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

Liệt kê tất cả các yếu tố mà không cần phân tách chúng, do đó tính tổng chúng.

^
$-1;

Truy xuất giá trị đơn nguyên ban đầu.

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

Đếm xem nó chia tổng bao nhiêu lần. (Hoặc không xuất ra nếu không.)

2 LuisMendo Sep 14 2020 at 06:33

Quãng tám , 36 34 byte

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

Hàm ẩn danh lấy số nguyên hoặc dấu phẩy động làm đầu vào. Trường hợp thử nghiệm cuối cùng không thành công do giới hạn bộ nhớ.

Hãy thử nó trực tuyến! Hoặc xác minh các trường hợp thử nghiệm .

Giải trình

@(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 (phát hành trước) , 62 byte

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

Hãy thử nó trực tuyến!

2 KevinCruijssen Sep 14 2020 at 17:29

MathGolf , 7 byte

─Σk‼÷/*

Hãy thử nó trực tuyến.

Giải trình:

─       # 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 byte

Kết quả không có gì nếu không ntồn tại.

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

Hãy thử nó ở đây (Mã sẽ cần được dán vào)

1 GalenIvanov Sep 14 2020 at 13:51

Biểu tượng , 67 byte

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

Hãy thử nó trực tuyến!

1 Shaggy Sep 14 2020 at 14:00

Japt -æ , 7 byte

Kết quả đầu ra undefinednếu không ntìm thấy.

*N¶Îâ x

Thử nó

1 GalenIvanov Sep 14 2020 at 14:17

Hệ số , 84 byte

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

Hãy thử nó trực tuyến!

1 user Sep 15 2020 at 02:19

Prolog, 117 byte

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.

Hãy thử nó trực tuyến! (Vui lòng không sửa đổi trực tiếp, nó cũng sẽ thay đổi phiên bản của tôi)


Nếu ai đó có thể tìm ra lý do tại sao phiên bản ngắn hơn (96 byte) này không hoạt động, tôi thực sự rất biết ơn.

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).

Phiên bản có gỡ lỗi in

1 2014MELO03 Sep 17 2020 at 02:48

GolfScript , 22 byte

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

Hãy thử nó trực tuyến!

~: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