Số mũ lớn nhất


22

Cho một số nguyên n >= 2, xuất ra số mũ lớn nhất trong hệ số nguyên tố của nó. Đây là chuỗi OEIS A051903 .

Thí dụ

Hãy để n = 144. Yếu tố chính của nó là 2^4 * 3^2. Số mũ lớn nhất là 4.

Các trường hợp thử nghiệm

2 -> 1
3 -> 1
4 -> 2
5 -> 1
6 -> 1
7 -> 1
8 -> 3
9 -> 2
10 -> 1
11 -> 1
12 -> 2
144 -> 4
200 -> 3
500 -> 3
1024 -> 10
3257832488 -> 3

Câu trả lời:







4

Python 2 , 78 byte

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

Hãy thử trực tuyến!

-5 nhờ vào trứng .

Câu trả lời này không làm kiểm tra chính. Thay vào đó, nó lợi dụng thực tế là số mũ cao nhất của một thừa số nguyên tố sẽ lớn hơn hoặc bằng số mũ của bất kỳ yếu tố nào khác trong bất kỳ hệ số nào của một số.



@ovs cảm ơn, đã bỏ lỡ điều đó trong khi tôi đang cố gắng đăng nhanh
Erik the Outgolfer


@ovs cuối cùng, đã thư giãn từ if /
other

4

Japt -h , 9 7 byte

k ü mÊn

Thử nó

k ü mÊn     :Implicit input of integer
k           :Prime factors
  ü         :Group by value
    m       :Map
     Ê      :  Length
      n     :Sort
            :Implicit output of last element

2
Tôi cảm thấy như thế này nên ngắn hơn, có lẽ tôi nên thêm một tích hợp cho các cặp số mũ nguyên tố ...
Sản phẩm ETH

Tại sao phải sử dụng "ü: Group by value" thay vì hàm sort? Có lẽ vì sắp xếp trả về một mảng nhưng chúng ta cần một mảng mảng ...
RosLuP

1
@RosLuP, Chính xác; ütạo các mảng con của các giá trị bằng nhau. Nó không còn sắp xếp theo giá trị đầu tiên nhưng điều đó không có liên quan ở đây.
Shaggy






2

Javascript 54 byte

* giả sử ngăn xếp vô hạn (cũng như trong các thử thách chơi gôn)

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)



2

Octave , 25 byte

@(n)[~,m]=mode(factor(n))

Hãy thử trực tuyến!

Giải trình

factortạo ra các số mũ nguyên tố (có thể lặp lại) Đầu ra thứ hai modecho số lần mà chế độ (tức là mục được lặp lại nhiều nhất) xuất hiện.




1

Gaia , 4 byte

ḋ)⌠)

Hãy thử trực tuyến!

  • - Tính hệ số nguyên tố là các cặp [số nguyên tố, số mũ] .

    • - Bản đồ và thu thập kết quả với giá trị tối đa.

    • ) - Phần tử cuối cùng (số mũ).

    • ) - Phần tử cuối cùng (số mũ tối đa)

Gaia , 4 byte

ḋ)¦⌉

Hãy thử trực tuyến!

  • - Tính hệ số nguyên tố là các cặp [số nguyên tố, số mũ] .

    • - Bản đồ với phần tử cuối cùng (số mũ).

    • - Lấy phần tử tối đa.



1

Octave : 30 byte

@(x)max(histc(a=factor(x),a));
  1. a=factor(x)trả về một vectơ chứa các thừa số nguyên tố của x. Đây là một vectơ được sắp xếp theo thứ tự tăng dần trong đó phép nhân của tất cả các số có factor(x)năng suất xsao cho mỗi số trong vectơ là số nguyên tố.
  2. histc(...,a)tính toán biểu đồ trên vectơ thừa số nguyên tố trong đó các thùng là các thừa số nguyên tố. Biểu đồ đếm số lần chúng ta đã thấy mỗi số nguyên tố, do đó mang lại số mũ của mỗi số nguyên tố. Chúng ta có thể gian lận ở đây một chút vì mặc dù factor(x)sẽ trả về các số hoặc thùng trùng lặp, nhưng chỉ một trong số các thùng đó sẽ chiếm được tổng số lần chúng ta thấy một số nguyên tố.
  3. max(...) do đó trả về số mũ lớn nhất.

Hãy thử trực tuyến!


1

Alice , 17 byte

/o
\i@/w].D:.t$Kq

Hãy thử trực tuyến!

Giải trình

/o
\i@/...

Đây chỉ là một khuôn khổ cho các chương trình số học đơn giản với I / O thập phân. Đây ...là chương trình thực tế, đã có đầu vào trên ngăn xếp và để đầu ra ở trên cùng của ngăn xếp.

Alice thực sự đã tích hợp sẵn để lấy hệ số nguyên tố của một số nguyên (ngay cả với các cặp số mũ), nhưng ngắn nhất tôi nghĩ ra khi sử dụng các số nguyên đó dài hơn 10 byte.

Thay vào đó, ý tưởng là chúng tôi liên tục chia một bản sao của từng yếu tố nguyên tố riêng biệt ra khỏi đầu vào, cho đến khi chúng tôi đạt được 1 . Số bước này thực hiện bằng số mũ nguyên tố lớn nhất. Chúng ta sẽ lạm dụng đầu băng làm biến số truy cập.

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.

1

Julia, 60 52 40 byte

f(x)=maximum(collect(values(factor(x))))

-12 + hiệu chỉnh nhờ Steadybox


1
Tôi nghĩ bạn cần thêm một cuộc gọi đến print(). Ngoài ra, tôi không thể lấy mã để chạy trên TIO , tôi cho rằng nó hoạt động trên một số phiên bản ngôn ngữ khác không có sẵn ở đó? Điều này chạy tốt trên TIO: print(maximum(collect(values(factor(parse(BigInt,readline()))))))
Steadybox

Điều này hoạt động trên trình thông dịch (ít nhất là trên máy tính của tôi). Nó cũng gây ra cảnh báo vì việc khởi tạo BigInt như thế đã bị phản đối. Tuy nhiên, nếu bạn sao chép và dán mã như vào trình thông dịch Julia, nó sẽ hoạt động. (nếu một bản in là bắt buộc vì nó phải được in rõ ràng, hãy đặt nó vào)
EricShermanCS

1
Điều print()này là cần thiết bởi vì câu trả lời cần phải là một chương trình đầy đủ (hiển thị đầu ra) hoặc một hàm (trả về đầu ra). Nếu không giải pháp của bạn là tốt. Dường như bạn có thể lưu một số byte (và tránh in) theo cách này:f(x)=maximum(collect(values(factor(x))))
Steadybox

1
Không có gì! Đây là một bài đăng meta về định dạng được phép cho một giải pháp.
Steadybox

0

Trên thực tế , 4 byte

w♂NM

Hãy thử trực tuyến!

w♂NM - Chương trình đầy đủ.

w - Đẩy các thừa số nguyên tố thành các cặp [số nguyên tố, số mũ].
 N - Lấy phần tử cuối cùng của mỗi (số mũ).
   M - Tối đa.

Tôi đã sử dụng giải pháp chính xác này để viết các trường hợp thử nghiệm :)
Mego

@Mego Bạn có nghĩ rằng nó có thể ngắn hơn (tôi không muốn bạn hư hỏng nếu bạn có một cái ngắn hơn, chỉ cần hỏi)? :)
Ông Xcoder

Không, tôi tin rằng điều này là tối ưu cho thực tế.
Mego

0

Python 2 , 64 byte

-4 byte nhờ H.PWiz.

lambda n:max(a*(n%k**a<1)for a in range(n)for k in range(2,-~n))

Hãy thử trực tuyến!

Cổng câu trả lời Haskell của H.PWiz . Tôi chỉ chia sẻ điều này bởi vì tôi tự hào rằng tôi có thể hiểu đoạn mã Haskell này và dịch nó. : P


Không range(1,n)hoạt động?
H.PWiz

range(1, n)tạo ra tất cả các số nguyên trong [1, n).
hoàn toàn là

1
À, thật ra bạn không cần phải đi hết na
H.PWiz

Ồ, được thôi, tôi không hoàn toàn hiểu toán học đằng sau nó. : P Cảm ơn!
hoàn toàn là


0

Tiên đề, 61 byte

f n==(a:=factors n;reduce(max,[a.i.exponent for i in 1..#a]))

Đây là lần đầu tiên tôi thấy có thể định nghĩa hàm mà không sử dụng dấu ngoặc đơn (). Thay vì "f (n) ==" "fn ==" ít hơn một ký tự ...


0

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 maxkhô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 factorizevà 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 dsự phân chia mđó và sau đó chúng ta chỉ tìm thấy giá trị cao nhất (p n d)cho dgiữa 2n. (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.)


Tôi đoán các maxgiải pháp tiêu chuẩn là (apply max (map cadr list)nhưng (cadr (argmax cadr list))không may là ngắn hơn.
Misha Lavrov


0

APL (NARS), 15 ký tự, 30 byte

{⌈/+/¨v∘=¨v←π⍵}

kiểm tra:

  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 

bình luận:

{⌈/+/¨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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.