Produk Pembagi


21

Tantangan

Diberi bilangan bulat positif, kembalikan produk pembagi nya, termasuk dirinya sendiri.

Ini adalah urutan A007955 di OEIS .

Uji Kasus

1: 1
2: 2
3: 3
4: 8
5: 5
6:36
7: 7
8: 64
9:27
10: 100
12: 1728
14: 196
24: 331776
25: 125
28: 21952
30: 810000

Mencetak gol

Ini , jadi jawaban tersingkat di setiap bahasa menang!


2
Catatan menarik (meskipun mungkin tidak berguna untuk tantangan ini): produk semua pembagi n selalu n ^ ((jumlah pembagi n) / 2).
Wojowu

Jawaban:


13

05AB1E , 2 byte

ÑP

Cobalah online!

Penjelasan

Ñ    # divisors
 P   # product

Dengan pandangan pertama saya akan mengatakan solusi ini berada di bawah P, tetapi ada sesuatu yang menahan saya ..
Uriel

7

Japt , 3 byte

â ×

Cobalah online!

Penjelasan

â ×  // implicit integer input

â    // get integer divisors
  ×  // get product of array

Sialan, bagaimana kamu ninja aku ?! : p Akan menghapus milik saya ketika saya sampai di komputer (kapan pun itu mungkin).
Shaggy

@ Shaggy Saya terkejut, karena saya baru tahu tentang keduanya âdan ×ketika menulis jawaban ini
Justin Mariner

Saya diperlambat oleh min. batas karakter!
Shaggy






3

Alice , 12 byte

/o
\i@/Bdt&*

Cobalah online!

Penjelasan

Ini hanya kerangka kerja biasa untuk I / O desimal:

/o
\i@/...

Maka programnya adalah:

B    Get all divisors of the input.
dt   Get the stack depth minus 1.
&*   Multiply the top two stack elements that many times, folding multiplication
     over the stack.

3

Neim , 2 byte

𝐅𝐩

Cobalah online!


3
Saya menggulir jawaban: kode monospace biasa, kode monospace biasa, plain ... bold, kode serif? :-P
ETHproduksi

@ ETHproduk Hehe.
Okx

4
@ ETHproductions Saya sebenarnya mengkodekan jawaban ini di iOS yang berarti saya tidak bisa melihat karakternya.
Okx

Itu ... sangat mengesankan.
ETHproduksi

2
@MamaFunRoll Sekarang itu adalah nama yang belum pernah saya dengar dalam waktu yang sangat lama ... ;-)
ETHproductions


2

x86-64 Kode Mesin, 26 byte

31 C9 8D 71 01 89 F8 FF C1 99 F7 F9 85 D2 75 03 0F AF F1 39 F9 7C EE 89 F0 C3

Kode di atas mendefinisikan fungsi yang mengambil parameter tunggal (nilai input, bilangan bulat positif) di EDI(mengikuti konvensi pemanggilan Sistem V AMD64 yang digunakan pada Gnu / Unix), dan mengembalikan hasil tunggal (produk pembagi) di EAX.

Secara internal, ini menghitung produk pembagi menggunakan algoritma iteratif (sangat tidak efisien), mirip dengan pengiriman C pizzapants184 . Pada dasarnya, ia menggunakan penghitung untuk mengulang semua nilai antara 1 dan nilai input, memeriksa untuk melihat apakah nilai penghitung saat ini adalah pembagi input. Jika demikian, itu akan berlipat ganda menjadi total produk yang berjalan.

Mnemonik bahasa assembly yang tidak disatukan:

; Parameter is passed in EDI (a positive integer)
ComputeProductOfDivisors:
   xor   ecx, ecx        ; ECX <= 0  (our counter)
   lea   esi, [rcx + 1]  ; ESI <= 1  (our running total)
.CheckCounter:
   mov   eax, edi        ; put input value (parameter) in EAX
   inc   ecx             ; increment counter
   cdq                   ; sign-extend EAX to EDX:EAX
   idiv  ecx             ; divide EDX:EAX by ECX
   test  edx, edx        ; check the remainder to see if divided evenly
   jnz   .SkipThisOne    ; if remainder!=0, skip the next instruction
   imul  esi, ecx        ; if remainder==0, multiply running total by counter
.SkipThisOne:
   cmp   ecx, edi        ; are we done yet? compare counter to input value
   jl    .CheckCounter   ; if counter hasn't yet reached input value, keep looping

   mov   eax, esi        ; put our running total in EAX so it gets returned
   ret

Fakta bahwa IDIVinstruksi menggunakan operan kode keras untuk dividen kram gaya saya sedikit, tapi saya pikir ini cukup baik untuk bahasa yang tidak memiliki built-in tetapi aritmatika dasar dan cabang kondisional!


2

TI-Basic (TI-84 Plus CE), 24 byte

Prompt X
1
For(A,1,X
If not(remainder(X,A
AAns
End

Program lengkap: meminta input dari pengguna; mengembalikan output dalam Ans, variabel khusus yang (pada dasarnya) menyimpan nilai dari nilai terbaru yang dihitung.

Penjelasan:

Prompt X             # 3 bytes, Prompt user for input, store in X
1                    # 2 bytes, store 1 in Ans for use later
For(A,1,X            # 7 bytes, for each value of A from 1 to X
If not(remainder(X,A # 8 bytes, If X is divisible by A...
AAns                 # 3 bytes, ...store (A * Ans) in Ans
End                  # 1 byte, end For( loop

2
Anda sebenarnya tidak memasukkan bytecount.
Erik the Outgolfer

@EriktheOutgolfer Whoops! Tetap.
pizzapants184

2

C (gcc), 52 48 byte

p,a;f(x){for(p=1,a=x;a;a--)p*=x%a?1:a;return p;}

-4 byte berkat Cody Grey

Fungsi yang mengambil bilangan bulat dan mengembalikan produk pembagi itu.

Cobalah online!

Tidak Disatukan:

int proddiv(int input) {
    int total = 1, loopvar;
    for(loopvar = input; loopvar > 0; --loopvar) {
    // for loopvar from input down to 1...
        total *= (input % loopvar) ? 1 : loopvar;
        // ...If the loopvar is a divisor of the input, multiply the total by loopvar;
    }
    return total;
}

Anda dapat menyimpan 4 byte dengan (1) menghitung mundur, (2) menghapus tanda kurung di sekitar p*=ekspresi, dan (3) meletakkan pernyataan di tubuh forloop untuk menjatuhkan koma. Saya juga suka menggunakan vars global, daripada menambahkan parameter tambahan. Ini menghindari perilaku tidak terdefinisi, tanpa biaya byte. Versi terakhir:p,a;f(x){for(p=1,a=x;a;--a)p*=x%a?1:a;return p;}
Cody Grey

Anda dapat mengganti return p;dengan p=p;dan menyimpan lima byte.
Jonathan Frech

Untuk menyimpan byte lain, Anda bisa menggantinya p,a;f(x)dengan f(x,p,a).
Jonathan Frech

Jika Anda menggunakan variabel lokal alih-alih global, Anda bahkan dapat menghapus keseluruhan return p;dan menyimpan bukan lima, tetapi sembilan byte. ( TIO )
Jonathan Frech

2

JavaScript (ES7), 32 byte

n=>g=(i=n)=>i?i**!(n%i)*g(i-1):1

Menyimpan beberapa byte dengan meminjam tip Leaky pada solusi Python musicman .


Cobalah

o.innerText=(f=
n=>g=(i=n)=>i?i**!(n%i)*g(i-1):1
)(i.value=1)();oninput=_=>o.innerText=f(+i.value)()
<input id=i type=number><pre id=o>


Alternatif (ES6), 32 byte

n=>g=(i=n)=>i?(n%i?1:i)*g(i-1):1

1
Mengapa tidak hanya kompatibel dengan ES6 (n%i?1:i)? (Tapi ini tidak akan menghemat byte.)
Arnauld

@Arnauld: karena setengah 6 jelas terlalu pagi untuk golf ponsel! : DI telah membalik ternary ketika aku melihat tip Leaky!
Shaggy

2

TI-Basic, 24 14 13 byte

Disimpan 1 byte berkat lirtosiast

:√(Ans^sum(not(fPart(Ans/randIntNoRep(1,Ans

1
Apakah Anda memerlukannya int(?
lirtosiast

1

QBIC , 22 byte

[:|~b/a=b'\`a|q=q*a}?q

Penjelasan

[:|           FOR a  = 1; a <= input (b); a++
 b/a=b'\`a    'a' is a proper divisor if integer division == float division
~         |   IF that's true
q=q*a         THEN multiply running total q (starts as 1) by that divsor
}             NEXT
?q            Print q



1

Mathematica, 17 byte

bagi mereka yang tidak dapat melihat jawaban yang dihapus (jawaban DavidC), ini adalah kode dalam Mathematica dengan bantuan @MartinEnder

1##&@@Divisors@#&

1

Bahasa Pemrograman Shakespeare , 353 byte

.
Ajax,.
Puck,.
Page,.
Act I:.
Scene I:.
[Enter Ajax and Puck]
Ajax:
You cat
Puck:
Listen to thy heart
[Exit Ajax]
[Enter Page]
Scene II:.
Puck:
You sum you cat
Page:
Is Ajax nicer I?If so, is remainder of the quotient Ajax I nicer zero?If not, you product you I.Is Ajax nicer I?If so, let us return to scene II
Scene III:.
Page:
Open thy heart
[Exeunt]

Versi tidak disatukan:

The Tragedy of the Product of a Moor's Factors in Venice.

Othello, a numerical man.
Desdemona, a product of his imagination.
Brabantio, a senator, possibly in charge of one Othello's factories.

Act I: In which tragedy occurs.

Scene I: Wherein Othello and Desdemona have an enlightened discussion.

[Enter Othello and Desdemona]

Othello:
  Thou art an angel!

Desdemona:
  Listen to thy heart.

[Exit Othello]
[Enter Brabantio]

Scene II: Wherein Brabantio expresses his internal monologue to Desdemona.

Desdemona:
  Thou art the sum of thyself and the wind!

Brabantio:
  Is Othello jollier than me?
  If so, is the remainder of the quotient of Othello and I better than nothing?
  If not, thou art the product of thyself and me.
  IS Othello jollier than me?
  If so, let us return to scene II!

Scene III: An Epilogue.

Brabantio:
  Open thy heart!

[Exeunt]

Saya menggunakan kompiler SPL ini untuk menjalankan program.

Jalankan dengan:

$ python splc.py product-of-divisors.spl > product-of-divisors.c
$ gcc product-of-divisors.c -o pod.exe
$ echo 30 | ./pod
810000

1

Python 3, 45 byte

lambda _:_**(sum(_%-~i<1for i in range(_))/2)

Biarkan xmenjadi nomor. Keduanya ydan zakan menjadi pembagi xjika y * z = x. Oleh karena itu, y = x / z. Katakanlah nomor dmemiliki 6 divisiors, karena pengamatan ini pembagi akan a, b, c, d / a, d / b, d / b. Jika kita mengalikan semua angka ini (titik teka-teki), kita memperolehnya d * d * d = d ^ 3. Secara umum, untuk edengan sejumlah fpembagi, produk pembagi tersebut akan menjadi e ^ (f / 2), yang adalah apa yang dilakukan lambda.

Cobalah online!


1

MY , 4 byte

Hex:

1A 3A 54 27

Penjelasan:

1A - Input as an integer
3A - Factors
54 - Product
27 - Output (with newline)







0

Fortran 95, 88 byte

function l(k)
n=0
l=1
do while(n<k)
n=n+1
if(MODULO(k,n)==0)then
l=l*n
end if
end do
end

Cobalah online!

Tidak Disatukan:

integer function l(k)
    implicit none
    integer :: n, k

    n=0
    l=1
    do while (n<k)
        n=n+1
        if (MODULO(k,n) == 0) then
            l=l*n
        end if
    end do

end function l

0

Aksioma, 23 byte

h(x)==x^(#divisors x/2)

Ini adalah terjemahan dari Aksioma solusi alephalpha

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.