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
Mego
sumber
Sandbox
Mego

Jawaban:

5

Haskell , 61 60 50 48 46 byte

-2 byte terima kasih kepada xnor

f n=maximum[a|k<-[2..n],a<-[1..n],n`mod`k^a<1]

Cobalah online!

45 byte dengan impor:

import NumberTheory
maximum.map snd.factorize

Cobalah secara Online!

H.Piz
sumber
Ini 0^lucu, tetapi lebih pendek untuk hanya memeriksa kondisi sebagai boolean.
xnor
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.

Erik the Outgolfer
sumber
81 byte
ovs
@ovs terima kasih, tidak terjawab ketika saya mencoba memposting dengan cepat
Erik the Outgolfer
78 byte
ovs
@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
Shaggy
sumber
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

Mathematica, 27 byte

Max[Last/@FactorInteger@#]&

Cobalah online!

J42161217
sumber
Atau Max@@Last/@FactorInteger@#&,. Sayangnya ini tidak menyimpan byte.
totallyhuman
3

MATL , 4 byte

YFX>

Cobalah online!

       % implicit input
YF     % Exponents of prime factors
X>     % maximum
       % implicit output

Giuseppe
sumber
3

Brachylog , 5 byte

ḋḅlᵐ⌉

Cobalah online!

Penjelasan

ḋ          Prime decomposition
 ḅ         Group consecutive equal values
  lᵐ       Map length
    ⌉      Maximum
Fatalisasi
sumber
3

Sekam , 5 byte

▲mLgp

Cobalah online!

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

APL (Dyalog) , 19 byte

CY'dfns'
⌈/12pco

Cobalah online!

Bagaimana?

2pco⎕ - Array 2D faktor utama dan eksponen

1↓ - Jatuhkan faktor-faktornya

⌈/ - maksimum

Uriel
sumber
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)

DanielIndie
sumber
2

PARI / GP, 24 byte

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

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

Jeppe Stig Nielsen
sumber
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.

Luis Mendo
sumber
1

Pyth , 7 byte

eShMr8P

Coba di sini.

Erik the Outgolfer
sumber
Alternatif: eS/LPQP(7 byte), eSlM.gkP(8 byte).
Tn. Xcoder
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.

Tuan Xcoder
sumber
1

MY , 4 byte

ωĖ⍐←

Cobalah online!

Penjelasan?

ωĖ⍐←
ω    = argument
 Ė   = prime exponents
  ⍐  = maximum
   ← = output without a newline
Zacharý
sumber
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!

rayryeng - Reinstate Monica
sumber
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.
Martin Ender
sumber
1

Julia, 60 52 40 byte

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

-12 + koreksi berkat Steadybox

EricShermanCS
sumber
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.
Tuan Xcoder
sumber
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

benar-benar manusiawi
sumber
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
1
64 bytes
H.PWiz
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 ...

RosLuP
sumber
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.)

Misha Lavrov
sumber
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)
RosLuP
sumber