Vợt , 83 79 byte
(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))
Hãy thử trực tuyến!
(Tôi không chắc có sự đồng thuận về những gì tạo nên một giải pháp Vợt hoàn chỉnh hay không, vì vậy tôi sẽ đi theo quy ước Mathicala rằng một hàm thuần túy sẽ được tính.)
Làm thế nào nó hoạt động
factorize
đưa ra các yếu tố như một danh sách các cặp: (factorize 108)
cho '((2 2) (3 3))
. Phần tử thứ hai của một cặp được đưa ra bởi cadr
, một tốc ký cho thành phần của car
(phần đầu của một danh sách) với cdr
(phần đuôi của một danh sách).
Tôi cảm thấy ngớ ngẩn khi (cadr (argmax cadr list))
tìm tối đa các yếu tố thứ hai, nhưng max
không hoạt động trong danh sách: (max (map cadr list))
không làm những gì chúng ta muốn. Tôi không phải là một chuyên gia về vợt, vì vậy có lẽ có một cách tiêu chuẩn tốt hơn để làm điều này.
Vợt, 93 byte
(λ(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))
Hãy thử trực tuyến!
Làm thế nào nó hoạt động
Một phiên bản thay thế không nhập factorize
và thay vào đó thực hiện mọi thứ từ đầu, ít nhiều. Hàm (p m d)
tìm thấy sức mạnh cao nhất của d
sự phân chia m
đó và sau đó chúng ta chỉ tìm thấy giá trị cao nhất (p n d)
cho d
giữa 2
và n
. (Chúng ta không cần hạn chế điều này trong các số nguyên tố, vì sẽ không có một sức mạnh tổng hợp nào hoạt động tốt hơn các quyền lực chính.)