Eksponen Perdana Terbesar


22

Dengan bilangan bulat n >= 2, menghasilkan eksponen terbesar dalam faktorisasi utamanya. Ini adalah urutan OEIS A051903 .

Contoh

Mari n = 144. Faktorisasi utamanya adalah 2^4 * 3^2. Eksponen terbesar adalah 4.

Uji Kasus

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

Jawaban:







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

Cobalah online!

-5 Terima kasih untuk OVs .

Jawaban ini tidak melakukan pemeriksaan prima. Sebagai gantinya, ia mengambil keuntungan dari fakta bahwa eksponen tertinggi dari faktor prima akan lebih besar atau sama dengan eksponen faktor lain dalam faktorisasi angka apa pun.



@ovs terima kasih, tidak terjawab ketika saya mencoba memposting dengan cepat
Erik the Outgolfer


@ovs akhirnya, menjadi santai dari if / else, terima kasih
Erik the Outgolfer

4

Japt -h , 9 7 byte

k ü mÊn

Cobalah

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

2
Saya merasa ini seharusnya lebih pendek, mungkin saya harus menambahkan built-in untuk pasangan eksponen utama ...
ETHproduk

Mengapa menggunakan "ü: Kelompokkan berdasarkan nilai" alih-alih fungsi sortir? Ya mungkin karena mengurutkan mengembalikan satu array tetapi kami membutuhkan satu array array ...
RosLuP

1
@RosLuP, Tepat; ümenciptakan sub-array dengan nilai yang sama. Ini tidak diurutkan menurut nilai pertama tapi itu tidak relevan di sini.
Shaggy




3

Sekam , 5 byte

▲mLgp

Cobalah online!

  • p - Mendapat faktor utama.
  • g - Mengelompokkan nilai yang berdekatan.
  • mL - Mendapat panjang masing-masing kelompok.
  • - Maksimal.


2

Javascript 54 byte

* dengan asumsi tumpukan tak terbatas (seperti halnya dalam tantangan kode-golf)

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

PARI / GP, 24 byte

n->vecmax(factor(n)[,2])

Jika saya tidak menghitung n->bagian, itu adalah 21 byte.


2

Oktaf , 25 byte

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

Cobalah online!

Penjelasan

factormenghasilkan array eksponen utama (mungkin diulang) Output kedua modememberi berapa kali mode (yaitu entri paling berulang) muncul.




1

Gaia , 4 byte

ḋ)⌠)

Cobalah online!

  • - Menghitung faktorisasi utama sebagai pasangan [prima, eksponen] .

    • - Memetakan dan mengumpulkan hasilnya dengan nilai maksimal.

    • ) - Elemen terakhir (eksponen).

    • ) - Elemen terakhir (eksponen maksimal)

Gaia , 4 byte

ḋ)¦⌉

Cobalah online!

  • - Menghitung faktorisasi utama sebagai pasangan [prima, eksponen] .

    • - Peta dengan elemen terakhir (eksponen).

    • - Mendapat elemen maksimal.


1

MY , 4 byte

ωĖ⍐←

Cobalah online!

Penjelasan?

ωĖ⍐←
ω    = argument
 Ė   = prime exponents
  ⍐  = maximum
   ← = output without a newline

1

Oktaf : 30 byte

@(x)max(histc(a=factor(x),a));
  1. a=factor(x)mengembalikan vektor yang mengandung faktor prima x. Ini adalah vektor yang diurutkan dalam urutan menaik di mana perkalian semua angka dalam factor(x)hasil xitu sendiri sehingga setiap angka dalam vektor adalah prima.
  2. histc(...,a)menghitung histogram pada vektor faktor prima di mana tong adalah faktor prima. Histogram menghitung berapa kali kita telah melihat setiap bilangan prima sehingga menghasilkan eksponen dari setiap bilangan prima. Kita bisa sedikit curang di sini karena meskipun factor(x)akan mengembalikan angka atau tempat duplikat, hanya satu dari sampah yang akan menangkap jumlah total kali kita melihat bilangan prima.
  3. max(...) dengan demikian mengembalikan eksponen terbesar.

Cobalah online!


1

Alice , 17 byte

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

Cobalah online!

Penjelasan

/o
\i@/...

Ini hanya kerangka kerja untuk program aritmatika ish sederhana dengan I / O desimal. Ini ...adalah program aktual, yang sudah memiliki input pada stack dan meninggalkan output di atas stack.

Alice sebenarnya memiliki built-in untuk mendapatkan factorisation utama dari integer (bahkan dengan pasangan prime-eksponen), tetapi yang terpendek yang saya buat dengan menggunakannya adalah 10 byte lebih lama dari ini.

Alih-alih idenya adalah bahwa kami berulang kali membagi satu salinan dari masing-masing faktor utama yang berbeda dari input, hingga kami mencapai 1 . Jumlah langkah yang diambil ini sama dengan eksponen utama terbesar. Kami akan menyalahgunakan kepala kaset sebagai variabel konter.

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 + koreksi berkat Steadybox


1
Saya pikir Anda perlu menambahkan panggilan ke print(). Juga, saya tidak bisa mendapatkan kode untuk berjalan di TIO seperti ini, saya menganggap itu berfungsi pada beberapa versi lain dari bahasa yang tidak tersedia di sana? Ini berjalan dengan baik di TIO: print(maximum(collect(values(factor(parse(BigInt,readline()))))))
Steadybox

Ini berfungsi pada penerjemah (di komputer saya, setidaknya). Ini juga menyebabkan peringatan karena menginisialisasi BigInt seperti itu telah ditinggalkan. Meskipun demikian, jika Anda menyalin dan menempelkan kode apa adanya ke dalam juru bahasa Julia, itu akan berfungsi. (jika cetak diperlukan karena harus dicetak secara eksplisit, saya tidak perlu memasukkannya)
EricShermanCS

1
Ini print()diperlukan karena jawabannya harus berupa program lengkap (yang menampilkan output) atau fungsi (yang mengembalikan output). Kalau tidak, solusi Anda baik-baik saja. Tampaknya Anda dapat menyimpan beberapa byte (dan menghindari cetakan) dengan cara ini:f(x)=maximum(collect(values(factor(x))))
Steadybox

1
Sama-sama! Berikut ini adalah meta pos tentang format apa yang diizinkan untuk solusi.
Steadybox

0

Sebenarnya , 4 byte

w♂NM

Cobalah online!

w♂NM - Program lengkap.

w - Mendorong faktorisasi utama sebagai pasangan [prima, eksponen].
 ♂N - Dapatkan elemen terakhir dari masing-masing (eksponen).
   M - Maksimum.

Saya menggunakan solusi tepat ini untuk menulis test case :)
Mego

@Mego Apakah Anda pikir itu bisa menjadi lebih pendek (saya tidak ingin Anda merusak jika Anda memiliki yang lebih pendek, hanya bertanya)? :)
Tn. Xcoder

Tidak, saya percaya ini optimal untuk Sebenarnya.
Mego

0

Python 2 , 64 byte

-4 byte terima kasih kepada H.PWiz.

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

Cobalah online!

Port jawaban H.PWiz's Haskell . Saya hanya membagikan ini karena saya bangga bahwa saya dapat memahami kode Haskell ini dan menerjemahkannya. : P


Tidak range(1,n)bekerja
H.PWiz

range(1, n)menghasilkan semua bilangan bulat dalam [1, n).
manusia

1
Ah, sebenarnya Anda tidak perlu melakukan apa-apa untuka
H.PWiz

Oh, oke, saya tidak sepenuhnya mengerti matematika di baliknya. : P Terima kasih!
totallyhuman


0

Aksioma, 61 byte

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

Ini adalah pertama kalinya saya menemukan mungkin mendefinisikan fungsi tanpa menggunakan tanda kurung (). Alih-alih "f (n) ==" "fn ==" satu karakter lebih sedikit ...


0

Racket , 83 79 byte

(λ(n)(cadr(argmax cadr((let()(local-require math/number-theory)factorize)n))))

Cobalah online!

(Saya tidak yakin apakah ada konsensus tentang apa yang merupakan solusi Racket lengkap, jadi saya akan pergi dengan konvensi Mathematica bahwa fungsi murni diperhitungkan.)

Bagaimana itu bekerja

factorizememberi faktorisasi sebagai daftar pasangan: (factorize 108)memberi '((2 2) (3 3)). Elemen kedua dari pasangan diberikan oleh cadr, singkatan untuk komposisi car(kepala daftar) dengan cdr(ekor daftar).

Saya merasa konyol melakukan (cadr (argmax cadr list))untuk menemukan maksimum dari elemen kedua, tetapi maxtidak bekerja pada daftar: (max (map cadr list))tidak melakukan apa yang kita inginkan. Saya bukan ahli Racket, jadi mungkin ada cara standar yang lebih baik untuk melakukan ini.

Racket, 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))

Cobalah online!

Bagaimana itu bekerja

Versi alternatif yang tidak mengimpor factorizedan malah melakukan semuanya dari awal, lebih atau kurang. Fungsi (p m d)menemukan kekuatan tertinggi dyang membagi mdan kemudian kita hanya menemukan nilai tertinggi (p n d)untuk dantara 2dan n. (Kita tidak perlu membatasi ini pada bilangan prima, karena tidak akan ada kekuatan gabungan yang bekerja lebih baik daripada kekuatan utama.)


Saya kira maxsolusi standar (apply max (map cadr list)tetapi (cadr (argmax cadr list))sayangnya lebih pendek.
Misha Lavrov


0

APL (NARS), 15 karakter, 30 byte

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

uji:

  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 

komentar:

{⌈/+/¨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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.