답변:
n=input()
e=m=0
f=2
while~-n:q=n%f<1;f+=1-q;e=q*-~e;m=max(m,e);n/=f**q
print m
ovs 덕분에 -5 .
이 답변은 프라임 검사를 수행하지 않습니다. 대신, 소인수의 최고 지수가 숫자의 인수 분해에서 다른 요소의 지수보다 크거나 같다는 사실을 이용합니다.
-h , k ü mÊn
k ü mÊn :Implicit input of integer
k :Prime factors
ü :Group by value
m :Map
Ê : Length
n :Sort
:Implicit output of last element
ü동일한 값의 하위 배열을 만듭니다. 그것은 않는 첫 번째 정렬 값으로도 있지만, 여기서는 관련이없는입니다.
Max@@Last/@FactorInteger@#&. 불행히도 이것은 바이트를 저장하지 않습니다.
ḋḅlᵐ⌉
ḋ Prime decomposition
ḅ Group consecutive equal values
lᵐ Map length
⌉ Maximum
* 무한 스택 가정 (코드 골프 과제에서와 같이)
P=(n,i=2,k)=>i>n?k:n%i?k>(K=P(n,i+1))?k:K:P(n/i,i,-~k)
console.log(P(2 )== 1)
console.log(P(3 )== 1)
console.log(P(4 )== 2)
console.log(P(5 )== 1)
console.log(P(6 )== 1)
console.log(P(7 )== 1)
console.log(P(8 )== 3)
console.log(P(9 )== 2)
console.log(P(10 )== 1)
console.log(P(11 )== 1)
console.log(P(12 )== 2)
console.log(P(144 )== 4)
console.log(P(200 )== 3)
console.log(P(500 )== 3)
console.log(P(1024 )== 10)
//console.log(P(3257832488 )== 3)
n->vecmax(factor(n)[,2])
n->부분을 계산하지 않으면 21 바이트입니다.
f=lambda n,i=2,l=[0]:(n<2)*max(map(l.count,l))or n%i and f(n,i+1,l)or f(n/i,2,l+[i])
@(x)max(histc(a=factor(x),a));
a=factor(x)의 소수를 포함하는 벡터를 반환합니다 x. 이 모든 수의 곱셈 오름차순으로 정렬 벡터이다 factor(x)수익률이 x벡터의 각 숫자가 소수 등 그 자체있다.histc(...,a)빈이 주요 요인 인 주요 요인 벡터에 대한 히스토그램을 계산합니다. 히스토그램은 각 소수를 본 횟수를 세어 각 소수의 지수를 산출합니다. factor(x)중복 된 숫자 나 빈을 반환 하더라도 빈 중 하나만 소수를 볼 수있는 총 횟수를 캡처 하므로 여기에서 약간의 부정 행위를 할 수 있습니다.max(...) 따라서 가장 큰 지수를 반환합니다./o
\i@/w].D:.t$Kq
/o
\i@/...
이것은 십진 I / O를 가진 단순한 산술 프로그램을위한 프레임 워크 일뿐입니다. 이 ...이미 스택에 입력을 갖고 스택의 상단에 출력을 떠나는 실제 프로그램이다.
Alice는 실제로 정수의 소수 분해를 얻기 위해 기본 제공 기능을 갖추고 있지만 소수를 사용하여 생성 한 가장 짧은 것은 이보다 10 바이트 더 깁니다.
대신 아이디어는 우리가 1에 도달 할 때까지 입력에서 각각의 고유 한 소인수의 사본 하나를 반복해서 나누는 것 입니다. 이것이 걸리는 단계의 수는 가장 큰 소수 지수와 같습니다. 테이프 헤드를 카운터 변수로 남용 할 것입니다.
w Remember the current IP position. Effectively starts a loop.
] Move the tape head to the right, which increments our counter.
.D Duplicate the current value, and deduplicate its prime factors.
That means, we'll get a number which is the product of the value's
unique prime factors. For example 144 = 2^4 * 3^2 would become
6 = 2 * 3.
: Divide the value by its deduplicated version, which decrements the
exponents of its prime factors.
.t Duplicate the result and decrement it. This value becomes 0 once we
reach a result of 1, which is when we want to terminate the loop.
$K Jump back to the beginning of the loop if the previous value wasn't 0.
q Retrieve the tape head's position, i.e. the number of steps we've taken
through the above loop.
print(). 또한 코드를 그대로 TIO 에서 실행할 수 없었습니다. 다른 언어 버전에서는 작동하지 않는다고 가정합니까? 이것은 TIO에서 잘 작동합니다 : print(maximum(collect(values(factor(parse(BigInt,readline()))))))
print()응답이 전체 프로그램을 할 필요가 있기 때문에 필요하다 (즉, 디스플레이 출력) 또는 함수 (즉, 반환 출력). 그렇지 않으면 솔루션이 좋습니다. 다음과 같은 방법으로 일부 바이트를 절약하고 인쇄를 피할 수 있습니다.f(x)=maximum(collect(values(factor(x))))
H.PWiz 덕분에 -4 바이트
lambda n:max(a*(n%k**a<1)for a in range(n)for k in range(2,-~n))
포트 H.PWiz는 하스켈 대답 . 나는이 Haskell 코드를 이해하고 번역 할 수 있다는 것을 자랑스럽게 생각하기 때문에 이것을 공유하고 있습니다. :피
range(1,n)작동하지?
range(1, n)[1, n)의 모든 정수를 생성합니다.
a
(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))
(나는 완전한 라켓 솔루션을 구성하는 것에 대한 합의가 있는지 확실하지 않으므로 순수한 함수가 계산하는 Mathematica 규칙을 사용합니다.)
factorize쌍의 목록으로 인수 분해를 (factorize 108)제공합니다 '((2 2) (3 3)). gives . 쌍의 두 번째 요소는 (목록의 머리글)과 (목록의 꼬리 ) cadr의 구성에 대한 약어입니다 .carcdr
나는 (cadr (argmax cadr list))두 번째 요소의 최대 값을 찾으려고 바보처럼 생각 하지만 max목록에서 작동 (max (map cadr list))하지 않습니다. 우리가 원하는 것을하지 않습니다. 나는 라켓의 전문가가 아니므로 이것을 수행하는 더 좋은 표준 방법이있을 수 있습니다.
(λ(n)(define(p d m)(if(=(gcd m d)d)(+(p d(/ m d))1)0))(p(argmax(λ(d)(p d n))(range 2 n))n))
가져 오지 않고 factorize대신 처음부터 모든 것을 수행하는 대체 버전입니다 . 이 함수 (p m d)는 d그 나누기 의 가장 큰 거듭 제곱을 찾은 m다음 and 사이 에 (p n d)대한 가장 높은 값을 찾습니다 . (이것은 소수로 제한 할 필요가 없습니다. 왜냐하면 소수보다 더 나은 복합 파워는 없기 때문입니다.)d2n
max솔루션은 (apply max (map cadr list)좋지만 (cadr (argmax cadr list))불행히도 짧습니다.
{⌈/+/¨v∘=¨v←π⍵}
테스트:
f←{⌈/+/¨v∘=¨v←π⍵}
f¨2..12
1 1 2 1 1 1 3 2 1 1 2
f¨144 200 500 1024 3257832488
4 3 3 10 3
논평:
{⌈/+/¨v∘=¨v←π⍵}
v←π⍵ π12 return 2 2 3; assign to v the array of prime divisors of argument ⍵
v∘=¨ for each element of v, build one binary array, show with 1 where are in v array, else puts 0
return one big array I call B, where each element is the binary array above
+/¨ sum each binary element array of B
⌈/ get the max of all element of B (that should be the max exponet)