카테고리 보관물: 코딩

코딩

소인수에서 파생 된 정수 시퀀스 계산 들어, 28은 11에 합한 3 개의

다음을 수행하는 함수, 표현식 또는 프로그램을 작성하십시오.

  1. 어떤 수의 소인수를 취하고 합산하십시오. 예를 들어, 28의 소인수는 2 2 7, 7로 합산됩니다.
  2. 결과에 주어진 수의 소인수를 곱하십시오. 예를 들어, 28은 11에 합한 3 개의 소인수를가집니다. 11 * 3은 33입니다.
  3. 목록에 이미 포함 된 숫자에 도달 할 때까지 결과 목록 (원래 번호로 시작)을 저장하여 프로세스를 반복적으로 반복하십시오. 마지막 번호를 추가하지 않고 중지하면 목록에 중복 항목이 포함되지 않습니다. 28의 진행률은 28 33입니다. 33이 다시 28가되기 때문입니다.
  4. 결과 목록에서 요소를 세십시오. 28의 경우 대답은 2입니다.

에 대한 결과는 다음과 같습니다 0<n<=10. 알고리즘을 확인할 수 있습니다.

2 1 1 10 1 11 1 9 5 10

(알파가 지적했듯이, 대답 higley(1)은 목록 1 0에서 2입니다. 원래 J로 작성된 원래 알고리즘의 버그로 인해 원래 1이있었습니다.)

내가 생각하는 SOB이고 이것을 OEIS 에서 찾지 못 했으므로 최소한이 코드 골프 기간 동안 이것을 “Higley Sequence”라고하자. 추가 보너스로, 소수가 아닌 n가장 낮은 higley(n)곳을 가진 처음 두 개 를 찾으십시오 . (두 개만 있다고 생각하지만 그것을 증명할 수는 없습니다.)nn>1

이것은 표준 코드 골프이므로 평소와 같이 가장 적은 키 입력으로 승리하지만 다른 언어로도 장황한 답변이더라도 자세한 답변을 부탁드립니다.



답변

J, 47 45

#@((~.@,[:(+/@{:*+/@:*/)2 p:{:)^:_)`2:@.(=&1)

를 사용하지 않으면 훨씬 짧아 질 수 ^:_있지만 뇌가 이미 충분히 튀겨졌습니다.

편집 : (47-> 45) 이중 쿠폰 일.

용법:

   higley =: #@((~.@,(+/@{:*+/@:*/)@(2&p:)@{:)^:_)`2:@.(=&1)
   higley 1
2
   higley"0 (1 + i. 10)
2 1 1 10 1 11 1 9 5 10


답변

골프 스크립트, 68 67 62 61 문자

[.]({[.2@{1$1$%{)}{\1$/1$}if}*;;].,*0+{+}*.2$?@@.@+\@)!}do;,(

이것은 표현식입니다. n스택에 걸리고 결과는 스택에 남습니다. nstdin에서 가져 와서 결과를 stdout으로 인쇄 하는 프로그램으로 바꾸려면 선행 [~

그것의 핵심은 [.2@{1$1$%{)}{\1$/1$}if}*;;](28 자) 스택에서 최상위 숫자를 취하고 (매우 비효율적 인 알고리즘으로) 주요 요소 목록을 생성합니다. C 스타일 유사 코드 :

ps = [], p = 2;
for (int i = 0; i < n; i++) {
    if (n % p == 0) {
        ps += p;
        n /= p;
    }
    else p++;
}

0+직전는 {+}*특별한 경우를 처리하는 것입니다 n==1Golfscript가 빈리스트를 이항 연산을 접는처럼하지 않기 때문에.

비 프라임 수정 점 중 하나는 27입니다. 나는 a == p (a-1) / 2 인 경우 고정 점 인 매핑 (p a -> a 2 p) 을 고려하고 프로그램을 사용하지 않고 프로그램을 사용하지 않고 이것을 찾았습니다 . ( 소수의 고정 점을 제공합니다).aa==1

프로그램을 검색하면 두 번째 수정 점이 나타납니다. 30 = (2 + 3 + 5) * 3


부록 : 프라임이 아닌 두 개의 고정 점이 있다는 증거

표기법 : sopfr(x)의 주요 요인 x과 반복 의 합입니다 (A001414). (A001222) Omega(x)의 소인수 x입니다. Higley의 후속 기능은h(x) = sopfr(x) Omega(x)

우리가 fixpoint 있다고 가정 N = h(N)의 제품입니다 n=Omega(N)소수를.

N = p_0 ... p_{n-1} = h(N) = n (p_0 + ... + p_{n-1})

기본 수 이론 :로 n나눕니다 p_0 ... p_{n-1}. 그래서 w=Omega(n)소수는의 주요 요소입니다 n. Wlog 우리는 그들을 마지막으로 가져갈 것 w입니다. 우리는에 의해 양쪽을 나눌 수 있도록 nGET 및

p_0 ... p_{n-w-1} = p_0 + ... + p_{n-1}

또는

p_0 ... p_{n-w-1} = p_0 + ... + p_{n-w-1} + sopfr(n)

모든 소수 가 1보다 크면 , 소수 p_0p_{n-w-1}늘리면 LHS보다 LHS가 증가합니다. 따라서 주어진 n후보에 대해 모든 후보 솔루션을 열거 할 수 있습니다.

특히, LHS가 RHS보다 큰 경우 솔루션이 없을 수 있습니다. 모든 “무료”프라임을 2로 설정하십시오. 즉, 다음과 같은 경우 솔루션이 없습니다.

2^{n-w} > 2 (n-w) + sopfr(n)

sopfr(n) <= n(n = 4 또는 n 소수에만 동등 함) 때문에 다음 과 같은 경우 수정 점이 없다는 약한 진술을 할 수 있습니다

2^{n-w} > 3 n - 2 w

지주는 w우리가 다른 값을 선택할 수있는 고정 n만족을 w=Omega(n). 가장 작은 n것은 2^w입니다. 경우에하는 것으로 2^{n-w}적어도 3 (즉, 경우에 n-w>1사실 인 경우 n>2)를 증가 n누른 상태에서 w일정하게하는 것이 더 RHS보다 LHS 증가합니다. 또한 w>2가능한 n한 불평등을 최소화 하고 불평등을 충족 시키며 고정 점이 없습니다.

그것은 우리에게 세 가지 경우를 남긴다 : w = 0그리고 n = 1; w = 1그리고 n프라임; 또는 w = 2n반 프라임입니다.

케이스 w = 0. n = 1따라서 N모든 소수입니다.

케이스 w = 1. 경우 n = 2다음 N = 2p우리가 필요로하고 p = p + 2, 어떤 어떤 솔루션이 없습니다. 경우 n = 3우리는이 pq = p + q + 3두 솔루션 (p=2, q=5)(p=3, q=3). 경우 n = 5다음 2^4 > 3 * 5 - 2 * 1, 그래서 더 이상의 솔루션이 없습니다 w = 1.

케이스 w = 2. 만약 n = 4다음 N = 4pq우리가 필요 pq = p + q + 4. 여기에는 정수 솔루션 p=2, q=6이 있지만 주요 솔루션은 없습니다. 경우 n = 6다음 2^4 > 3 * 6 - 2 * 2, 그래서 더 이상의 솔루션이 없습니다 w = 2.

모든 경우가 소진되었으므로 비 프라임 고정 지점은 27과 30뿐입니다.


답변

루비, 92 자

f=->i{r=[i];(x=s=0;(2..i).map{|j|(s+=j;x+=1;i/=j)while i%j<1};r<<i=s*x)until r.uniq!;r.size}

이 솔루션은 higley (1)이 실제로 1이 아니라 2라고 가정합니다 (위의 balpha 주석 참조).

(1..10).map &f
=> [2, 1, 1, 10, 1, 11, 1, 9, 5, 10]


답변

옥타브-109 자

l=[input('')];while size_equal(unique(l),l);n=factor(l(1));l=[sum(n)*length(n) l];endwhile;disp(length(l)-1);


답변

MATL , 19 바이트

i`vt0)Yftnws*yy-]xn

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


답변