과잉 결정


21

너무 많은 개수는 정수 N 새가 상부와의 결합 비율은 그 세트 제수 합 함수 σ. 즉, n은 모든 양의 정수에 대한 너무 많은 경우에만 경우이며, X 미만이다 N :

σ(n)n>σ(x)x

몇 가지 값의 경우 :

n   σ(n)   σ(n)/n   superabundant
1   1      1.0000   yes
2   3      1.5000   yes
3   4      1.3333   no
4   7      1.7500   yes
5   6      1.2000   no
6   12     2.0000   yes
7   8      1.1429   no
8   15     1.8750   no
9   13     1.4444   no

더 많은 (테스트 사례) 목록은 OEIS A004394 에서 찾을 수 있습니다 .

하나 추천 이 마지막으로 너무 많은 수과의 관계 때문에 부정적인 테스트 케이스 (당신의 통역을 처리 할 수있는 경우), 360,360이다.

도전

프로그램은 단일 양의 정수를 가져 와서 정수가 과다한지 여부를 나타내는 참 또는 거짓 값을 출력해야합니다.

이것이 이므로 바이트 단위의 최단 답변이 이깁니다.

답변:


7

젤리 , 7 바이트

Æs÷$ÞṪ=

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

젤리 , 8 바이트

Æs÷$ÐṀ⁼W

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

테스트 스위트!

설명

Æs ÷ $ ÐṀ⁼W ~ 전체 프로그램 (모나 딕).

    ÐṀ ~ 요소를 최대 링크 값으로 유지 (자동 범위 조정)
Æs ~ 제수 합계.
  ÷ $ ~ 현재 요소로 나눕니다.
      ~ W ~ 싱글 톤으로 싸인 입력과 같은지 점검하십시오.
         ~ (360360과 같은 정수)

나는 당신이 Æs÷$ÐṀ=7 바이트를 할 수 있다고 생각합니다 . 나는 ÐṀ울렸다는 것을 몰랐다. 그것은 유용하다.
dylnan

@dylnan 아니, 난 못해. 온라인으로 테스트 할 수는 없지만 실패합니다 360360. 사실,이이었다 내 초기 버전
씨 Xcoder

왜 실패 360360할까요?
dylnan

@dylnan이 360360는 IS 첫째 는 전에 발생한 결과를 묶는 첫 번째 숫자이기 때문에, 그것은 (내가 생각하는) 실패 할 수. (결과는 다음과 같습니다 [0, 1])
Mr. Xcoder

@ Mr.Xcoder 감사합니다
dylnan



4

옥타브 , 41 바이트

@(n)([~,p]=max((x=1:n)*~mod(x,x')./x))==n

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

설명

@(n)                                       % Define anonymous function of n
                x=1:n                      % Range from 1 to n. Call that x
                        mod(x,x')          % n×n matrix of all pair-wise moduli
                       ~                   % Logical negate. True means it's a divisor
               (     )*                    % Matrix-multiply x times the above matrix
                                           % (gives the dot product of vector x times
                                           % each column of the matrix)
                                 ./x       % Divide each column by each entry in x
     [~,p]=max(                     )      % Index of first occurrence of maximum
    (                                )==n  % Does it equal n?

3

J , 35 바이트

Xcoder 씨에게 문제를 찾아 주셔서 감사합니다. 문제를 해결해 주셔서 감사합니다.

[:([:*/{:>}:)@(%~>:@#.~/.~&.q:)1+i.

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


1
이것은 실패합니다 360360(자세한 내용은 도전 참조) : 강력하게 권장되는 부정적인 테스트 사례 중 하나는 360360 입니다.
Mr. Xcoder

1
+3 바이트로 수정되었습니다. 온라인으로 사용해보십시오 . 골프 작업. 나는 #.~많이 사용하는 것을 좋아합니다 (솔직히 전체 제수 합 함수가 정말 좋습니다). btw의 잘못된 점은, 할 생각 {:=>./은 영리 하지만 , 질문의 "보다 큰"부분을 만족시키지 못한다는 것입니다.

1
다음은 현재 동일한 길이의 시그마 함수를 대체하기 위해 제시 한 것 (1#.{:(]*0=|~)])\ 입니다. 그래도 문제가있을 것입니다. 생각이 있으십니까?
cole

1
@cole 제수의 합으로 계산 된 크레딧은 이 글 에서 Roger Hui에게 간다 . 또한 다른 시그마 함수를 작성하기 시작했지만 9 바이트에 도달 한 후 중지하고 소인수 분해보다 짧지 않기로 결정했습니다. 문제를 해결해 주셔서 감사합니다!
Galen Ivanov

내가 생각 해낸 약수의 합이 가장 짧은 다른 동사를 @cole하는 것은 이것이다 : (1#.]*0=|~)1+i.그것은 후크의 제자리에 쉽게 맞지 않는 생각 :)
갈렌 이바노프

3

줄리아 0.6 , 52 바이트

n->indmax(sum(x for x=1:m if m%x<1)//m for m=1:n)==n

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

이 솔루션은 합리적인 경우 정확성을 보장하기 위해 유리수를 사용합니다. (360360 테스트에는 거의 10 분이 걸렸습니다.)

부동 소수점을 사용하면 왼쪽 나누기와 함께 2 바이트를 저장할 수 있습니다.

n->indmax(m\sum(x for x=1:m if m%x<1)for m=1:n)==n

3

Pyth , 14 바이트

( FryAmTheEggman 은 1 바이트를 저장했습니다)

qh.Mcs*M{yPZZS

여기 사용해보십시오! 또는 더 많은 테스트 사례를 참조하십시오.

내 필수 Pyth 제출은 골프를 칠 가능성이 높습니다.

방법?

qh.Mcs * M {yPZZS ~ 전체 프로그램. Q = 입력

             S ~ [1, Q] 범위의 정수.
  .M ~ 최대 기능 값을 가진 요소를 가져옵니다.
    cs * M {yPZZ ~ 키 기능 : 변수 Z를 사용합니다.
         yPZ ~ Z의 소인수의 거듭 제곱.
        {~ 중복 제거되었습니다.
      * M ~ 각각의 제품.
     s ~ 그리고 요약했다.
    c Z ~ Z로 나눈 값.
 h ~ 첫 번째 요소.
q ~ 입력과 같은지 점검하십시오. True 또는 False를 출력합니다.

3

05AB1E , 10 바이트

LÑOā/ZQ¨_P

온라인으로 사용해보십시오! 또는 테스트 스위트

설명

L            # push range [1 ... input]
 Ñ           # divisors of each
  O          # sum of each
   ā/        # divide each by its 1-based index
     Z       # get max
      Q      # compare to each
       ¨     # remove the last element
        _    # logical negation
         P   # product

나는 생각 이 실패 (나는 확실히 아니지만) 360360(자세한 내용은 도전을 참조하십시오 . 그것이 마지막으로 너무 많은 수과의 관계 때문에 하나 추천 부정적인 테스트 케이스, 360,360입니다 ).
Mr. Xcoder

@ Mr.Xcoder : 맞습니다. 수정했지만 지금이 더 좋은 방법이있을 수 있습니다.
Emigna


2

R을 사용하여 numbers59 바이트

f=function(n)which.max(sapply(1:n,numbers::Sigma)/(1:n))==n

2

Mathematica, 53 50 바이트

a=Tr@Divisors@#/#&;AllTrue[a@#-Array[a,#-1],#>0&]&

순수한 기능. 정수를 입력으로 사용하여 리턴 True또는 False출력으로 사용합니다.


Tr@Divisors@#작동하는 것 같은가?
user202729

1

Japt v2.0a0, 12 16 바이트

수면 박탈 뇌는 더 이상 개선되지 않는 것 같습니다!

1진실하거나 거짓으로 돌아 0옵니다.

Æâ x÷U >Xâ x÷XÃ×

시도 해봐

처리 할 4 바이트를 희생했습니다 360360.


설명

  • 정수의 묵시적 입력 U.
  • Æ Ã에서 0까지 의 정수 배열을 만들고 U-1각각 다음 함수를로 전달합니다 X.
  • â의 제수를 구합니다 U.
  • ÷U각각을로 나눕니다 U.
  • x 결과를 합산합니다.
  • 의 제수를 구합니다 X.
  • ÷X각각을로 나눕니다 X.
  • x 결과를 합산합니다.
  • > 첫 번째 결과가 두 번째 결과보다 큰지 확인합니다.
  • × 곱셈으로 결과 부울 배열을 줄입니다.

1
현재 접근 방식이 설명과 일치하면 실패합니다. 360360 : 또는 다른 정수 (당신의 통역을 처리 할 수있는 경우)이 마지막으로 너무 많은 수과의 관계 때문에, 360360 하나 추천 부정적인 테스트 케이스
씨 Xcoder

@ Mr.XCoder : 견과류, 맞아요! 내가 고칠 순간 내가 아마 약간의 바이트 비용이들 것입니다.
얽히고 설킨

@ Mr.Xcoder : 지금은 수정되었으므로 나중에 다시 개선해야하는지 확인해야합니다.
얽히고 설킨

0

APL + WIN, 37 바이트

 ↑1=⍒⌽(+/¨((0=(⍳¨n)|¨n)×⍳¨n)~¨⊂0)÷n←⍳⎕

화면 입력을 요구합니다.


0

C (gcc), 99 바이트

s(n,j,k){for(j=k=0;j++<n;)k+=n%j?0:j;n=k;}f(n,i,r){for(i=r=0;++i<n;)r=1.*s(n)/n<1.*s(i)/i?:r;r=!r;}

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

C, 108 바이트

float s(n,j,k){for(j=k=0;j++<n;)k+=n%j?0:j;return k;}f(n,i,r){for(i=r=0;++i<n;)s(n)/n<s(i)/i&&++r;return!r;}

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


그렇다면 왜 sfloat를 반환해야합니까?
Nissa

@StephenLeppik 비교할 때 정수 나누기 대신 부동 나누기를 사용 s(n)/n합니다 s(i)/i.
Steadybox

0

스위프트 , 120 118 바이트

let s={n in Float((1...n).reduce(0){n%$1>0 ?$0:$0+$1})}
{n in(1..<n).reduce(0){max($0,s($1)/Float($1))}<s(n)/Float(n)}

Swift의 암시 적 유형 선언으로 인해 컴파일하는 데 약간의 시간 (TIO의 경우 약 6 초)이 걸립니다.

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



0

펑키 , 79 바이트

d=n=>fors=i=0i<=n i++s+=i*!n%i
f=n=>{forc=1c<n c++if(d(n)/n)<=d(c)/c return0 1}

설명

이것은 먼저 함수 d인 함수 를 정의하고 이것은 σ골프 버전입니다.

function d(n){
    var s = 0;
    for(var i=0; i<n; i++){
        if(n%i == 0){
            s += i;
        }
    }
    return s;
}

때문에 우리는 0으로 난을 설정할 수 있습니다 i*n%0뜻이 항상 동일 0*...하므로,0 .

이것의 다음 절반은 fSuperabandunce 함수 인 함수를 정의 하며 이것은 단지 골프 형태입니다.

function f(n){
    for(var c=1; c<n; c++){
        if( (d(n)/n) <= (d(c)/c) ){
            return 0;
        }
    }
    return 1;
}

그리고 이것은 챌린지 사양에서 알 수 있듯이 1에서 n-1까지의 모든 정수 d(n)/n가 입력 값보다 작은 지 확인합니다.

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



0

껍질 , 9 바이트

εü<m§ṁ/Ḋṫ

온라인으로 사용해보십시오! 360360 테스트 케이스가 너무 느립니다.

설명

εü<m§ṁ/Ḋṫ  Implicit input, say n=6.
        ṫ  Decreasing range: [6,5,4,3,2,1]
   m       Map this function (example argument k=4):
       Ḋ    Divisors of k: [1,2,4]
    §ṁ      Map and sum
      /     division by k: 7/4
           Result: [2,6/5,7/4,4/3,3/2,1]
 ü         Remove duplicates by
  <        strict comparison. This greedily extracts a non-decreasing subsequence: [2]
ε          Is it a singleton list? Yes.

알았습니다 £ü¤<§ṁ/ḊN. 풍부한 숫자의 전체 목록 만들기
H.PWiz

0

펄 5, 84 바이트

say!grep$a[-1]<=$a[$_],0..(@a=map{$i=$_;my$j;map{$i%$_ or$j+=$_/$i}1..$i;$j}1..<>)-2

필요하다 -E (무료)

골프 사양의 간단한 구현


0

APL (NARS), 61 자, 122 바이트

r←f w;m;k
r←m←0
r+←1⋄k←r÷⍨11πr⋄→3×⍳r≥w⋄→2×⍳∼m<k⋄m←k⋄→2
r←k>m

11π는 요인의 함수 합입니다.

  (⍳9),¨ f¨1..9
1 1  2 1  3 0  4 1  5 0  6 1  7 0  8 0  9 0 
  f 360360
0
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.