다음을 수행하는 함수, 표현식 또는 프로그램을 작성하십시오.
- 어떤 수의 소인수를 취하고 합산하십시오. 예를 들어, 28의 소인수는 2 2 7, 7로 합산됩니다.
- 결과에 주어진 수의 소인수를 곱하십시오. 예를 들어, 28은 11에 합한 3 개의 소인수를가집니다. 11 * 3은 33입니다.
- 목록에 이미 포함 된 숫자에 도달 할 때까지 결과 목록 (원래 번호로 시작)을 저장하여 프로세스를 반복적으로 반복하십시오. 마지막 번호를 추가하지 않고 중지하면 목록에 중복 항목이 포함되지 않습니다. 28의 진행률은 28 33입니다. 33이 다시 28가되기 때문입니다.
- 결과 목록에서 요소를 세십시오. 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)
곳을 가진 처음 두 개 를 찾으십시오 . (두 개만 있다고 생각하지만 그것을 증명할 수는 없습니다.)n
n>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
스택에 걸리고 결과는 스택에 남습니다. n
stdin에서 가져 와서 결과를 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==1
Golfscript가 빈리스트를 이항 연산을 접는처럼하지 않기 때문에.
비 프라임 수정 점 중 하나는 27입니다. 나는 a == p (a-1) / 2 인 경우 고정 점 인 매핑 (p a ->
a 2 p) 을 고려하고 프로그램을 사용하지 않고 프로그램을 사용하지 않고 이것을 찾았습니다 . ( 소수의 고정 점을 제공합니다).a
a==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
입니다. 우리는에 의해 양쪽을 나눌 수 있도록 n
GET 및
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_0
를 p_{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 = 2
과 n
반 프라임입니다.
케이스 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);