답변:
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
의 구성에 대한 약어입니다 .car
cdr
나는 (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)
대한 가장 높은 값을 찾습니다 . (이것은 소수로 제한 할 필요가 없습니다. 왜냐하면 소수보다 더 나은 복합 파워는 없기 때문입니다.)d
2
n
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)