제수의 곱


21

도전

양의 정수가 주어지면 자신을 포함한 제수의 곱을 반환하십시오.

이것은 OEIS의 시퀀스 A007955입니다 .

테스트 사례

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

채점

이것은 이므로 각 언어에서 가장 짧은 답변이 이깁니다!


2
흥미로운 참고 사항 (이 도전에는 유용하지는 않지만) : n의 모든 제수의 곱은 항상 n ^ ((제수 n의 수) / 2)입니다.
Wojowu

답변:









3

Alice , 12 바이트

/o
\i@/Bdt&*

온라인으로 사용해보십시오!

설명

이것은 10 진 I / O의 일반적인 프레임 워크입니다.

/o
\i@/...

그런 다음 프로그램은 다음과 같습니다

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

3
대답을 스크롤링 : 일반 고정 폭 코드, 일반 고정 폭 코드, 일반 ... 굵게, 세리프 코드? - P
ETHproductions

@ETHproductions Hehe.
Okx

4
@ETHproductions 실제로 iOS 에서이 답변을 코딩 했으므로 실제로 문자를 볼 수 없습니다.
Okx

정말 ... 인상적입니다.
ETHproductions

2
@MamaFunRoll 이제는 오랫동안 들어 보지 못한 이름입니다 ... ;-)
ETHproductions


2

x86-64 기계 코드, 26 바이트

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

위의 코드는 EDI( Gnu / Unix에서 사용되는 System V AMD64 호출 규칙에 따라 ) 단일 매개 변수 (입력 값, 양의 정수)를 취하고 에서 단일 결과 (제수의 곱)를 반환하는 함수를 정의합니다 EAX.

내부적으로 이것은 pizzapants184의 C 제출 과 비슷한 (매우 비효율적 인) 반복 알고리즘을 사용하여 제수의 곱을 계산합니다 . 기본적으로 카운터를 사용하여 1과 입력 값 사이의 모든 값 을 반복 하여 현재 카운터 값이 입력의 제수인지 확인합니다. 그렇다면,이를 누적 총 제품에 곱합니다.

Ungolfed 어셈블리 언어 니모닉 :

; 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

IDIV명령이 배당 경련에 대해 하드 코딩 된 피연산자를 사용 한다는 사실 은 약간의 스타일이지만 기본적으로 산술 및 조건 분기가없는 언어에는 이것이 좋습니다.


2

TI 기본 (TI-84 Plus CE), 24 바이트

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

전체 프로그램 : 사용자에게 입력을 요구합니다. (기본적으로) 계산 된 최신 값을 저장 Ans하는 특수 변수 인 출력을로 반환합니다 .

설명:

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
실제로 바이트 수를 포함하지 않았습니다.
Outgolfer Erik

트윗 담아 가기 결정된.
pizzapants184

2

C (gcc), 52 48 바이트

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

Cody Grey 덕분에 -4 바이트

정수를 받아서 그 제수의 곱을 반환하는 함수입니다.

온라인으로 사용해보십시오!

언 골프 드 :

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

(1) 역으로 계산하고 (2) p*=식 주위의 괄호를 제거 하고 (3) for루프 본문에 문장을 넣어 쉼표를 삭제하여 4 바이트를 절약 할 수 있습니다 . 또한 매개 변수를 추가하는 대신 전역 변수를 사용하고 싶습니다. 이것은 바이트 비용을 들이지 않고 정의되지 않은 동작을 피합니다. 최종 버전 :p,a;f(x){for(p=1,a=x;a;--a)p*=x%a?1:a;return p;}
Cody Grey

5 바이트로 대체 return p;하여 p=p;저장할 수 있습니다 .
Jonathan Frech

또 다른 바이트를 저장하려면, 당신은 대체 할 수 p,a;f(x)와 함께 f(x,p,a).
Jonathan Frech

전역 변수 대신 로컬을 사용하면 전체를 제거 return p;하고 5 바이트가 아닌 9 바이트를 저장할 수도 있습니다. ( TIO )
Jonathan Frech

2

자바 스크립트 (ES7), 32 바이트

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

음악가의 Python 솔루션 에 대한 Leaky의 팁을 빌려 몇 바이트를 절약했습니다 .


시도 해봐

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>


대체 (ES6), 32 바이트

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

1
왜 ES6와 호환되지 (n%i?1:i)않습니까? (그러나 이것은 바이트를 저장하지 않습니다.)
Arnauld

@Arnauld : 아침 6시 반은 전화 골프를하기에는 너무 이르다. : Leak의 팁을 보았을 때, DI는 삼항이 반전되었습니다!
얽히고 설킨

2

TI 기본, 24 14 13 바이트

lirtosiast 덕분에 1 바이트 절약

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

1
당신은 필요 int(합니까?
lirtosiast

1

QBIC , 22 바이트

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

설명

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

수학, 17 바이트

삭제 된 답변 (DavidC의 답변)을 볼 수없는 사람들을 위해, 이것은 @MartinEnder의 도움으로 Mathematica의 코드입니다

1##&@@Divisors@#&

1

셰익스피어 프로그래밍 언어 , 353 바이트

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

언 골프 버전 :

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]

이 SPL 컴파일러를 사용 하고 있습니다 를 하여 프로그램을 실행하고 있습니다.

로 실행 :

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

1

파이썬 3, 45 바이트

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

방해 x숫자로 . 모두 yz의 약수 될 것입니다 x경우 y * z = x. 따라서 y = x / z. 하자의 숫자라고 d인해 제수가 될 것이 관찰로, 6 divisiors이있다 a, b, c, d / a, d / b, d / b. 이 모든 수 (퍼즐의 점)를 곱하면을 얻습니다 d * d * d = d ^ 3. 일반적으로, e다수의 f제수의 경우, 상기 제수의 곱은 e ^ (f / 2)람다가하는 것입니다.

온라인으로 사용해보십시오!


1

MY , 4 바이트

마녀:

1A 3A 54 27

설명:

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







0

포트란 95, 88 바이트

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

온라인으로 사용해보십시오!

언 골프 드 :

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

공리, 23 바이트

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

이것은 alephalpha 솔루션의 공리에서 번역입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.