最大の素数指数


22

整数を指定するとn >= 2、その素因数分解で最大の指数を出力します。これは、OEISシーケンスA051903です。

させてくださいn = 144。その素因数分解は2^4 * 3^2です。最大の指数は4です。

テストケース

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

回答:







4

Python 2、78バイト

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

オンラインでお試しください!

-5 ovsに感謝します。

この答えはプライムチェックを行いません。代わりに、素因数の最高指数が数値の因数分解における他の因子の指数以上になるという事実を利用します。



@ovsありがとう、私が素早く投稿しようとしていた間、それを逃した
エリックアウトゴルファー


@ovs、ついにif / elseからリラックスしました。ありがとう
エリック・ザ・アウトゴルファー

4

ジャプト -h9 7バイト

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

2
これはもっと短くするべきだと思う、多分私は素数と指数のペアのためにビルトインを追加する必要がある
...-ETHproductions

ソート関数の代わりに「ü:Group by value」を使用する理由 はい、おそらくsortは1つの配列を返しますが、配列の1つの配列が必要なためです...
RosLuP

1
@RosLuP、まさに; ü等しい値のサブ配列を作成します。それはありません最初のソート値でも、それはここでは関係ありません。
シャギー






2

Javascript 54バイト

*無限のスタックを想定(コードゴルフの課題と同様)

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)






1

ガイア、4バイト

ḋ)⌠)

オンラインでお試しください!

  • - [素数、指数]のペアとして素因数分解を計算します。

    • -最大値で結果をマッピングおよび収集します。

    • ) -最後の要素(指数)。

    • ) -最後の要素(最大指数)

ガイア、4バイト

ḋ)¦⌉

オンラインでお試しください!

  • - [素数、指数]のペアとして素因数分解を計算します。

    • -最後の要素を持つマップ(指数)。

    • -最大要素を取得します。



1

オクターブ:30バイト

@(x)max(histc(a=factor(x),a));
  1. a=factor(x)の素因数を含むベクトルを返しますx。これは、ベクトル内のすべての数値が素数になるように、すべての数値の乗算がそれ自体をfactor(x)もたらす昇順でソートさxれたベクトルです。
  2. histc(...,a)ビンが素因数である素因数ベクトルのヒストグラムを計算します。ヒストグラムは、各素数を見た回数をカウントアップするため、各素数の指数が得られます。factor(x)重複する数値またはビンを返す場合でも、素数が表示される合計時間をキャプチャするのはビンの1つだけであるため、ここで少しごまかすことができます。
  3. max(...) したがって、最大の指数を返します。

オンラインでお試しください!


1

アリス、17バイト

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

オンラインでお試しください!

説明

/o
\i@/...

これは、10進数のI / Oを備えた単純な算術プログラムの単なるフレームワークです。の...は実際のプログラムであり、既にスタックに入力があり、スタックの最上部に出力が残ります。

アリスには、整数の素因数分解を行うための組み込み関数があります(素数と指数のペアを使用する場合でも)が、これを使用して考え出した最短はこれより10バイト長くなります。

代わりに、1に達するまで、入力から各素因数の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.

1

ジュリア、60 52 40バイト

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

-12 + Steadyboxによる修正のおかげ


1
への呼び出しを追加する必要があると思いますprint()。また、TIOでコードをそのまま実行することができませんでした。そこで利用できない言語の他のバージョンでも動作すると思いますか?これはTIOで正常に実行されます print(maximum(collect(values(factor(parse(BigInt,readline()))))))
。– Steadybox

これはインタプリタで動作します(少なくとも私のコンピュータでは)。また、そのようなBigIntの初期化は推奨されないため、警告も発生します。それでも、コードをそのままコピーしてジュリアインタプリタに貼り付ければ、動作するはずです。(明示的に印刷する必要があるため印刷が必要な場合は、それを入れないでください)
-EricShermanCS

1
print()答えは完全なプログラムをする必要があるために必要とされる(つまりディスプレイ出力)または関数(そのリターン出力)。それ以外の場合、ソリューションは問題ありません。次のように、いくつかのバイトを保存(および印刷を回避)できるようですf(x)=maximum(collect(values(factor(x))))
。– Steadybox

1
どういたしまして!ソリューションに許可されている形式についてのメタ投稿を次に示します。
Steadybox

0

実際には、4バイト

w♂NM

オンラインでお試しください!

w♂NM-完全なプログラム。

w-素因数分解を[prime、exponent]ペアとしてプッシュします。
 ♂N-それぞれの最後の要素(指数)を取得します。
   M-最大。

テストケースの作成にこの正確なソリューションを使用しました:)
Mego

@Mego短くなると思いますか(短いものがあれば、だめにしたくありません、ただ尋ねます)。:)
ミスターXcoder

いいえ、これは実際には最適だと思います。
メゴ

0

Python 2、64バイト

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回答のポート。これを共有しているのは、このHaskellコードを理解して翻訳できたことを誇りに思っているからです。:P


動作しrange(1,n)ませんか?
H.PWiz

range(1, n)[1、n)のすべての整数を生成します。
完全に人間の

1
ああ、まあ、あなたは実際にnまでずっと行く必要はありませんa
-H.PWiz

ああ、わかりました、私はその背後にある数学を完全に理解していません。:Pありがとう!
完全に人間


0

公理、61バイト

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

()括弧を使用せずに関数を定義することができるのは初めてです。"f(n)==" "fn =="の代わりに1文字少ない...


0

ラケット83 79バイト

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

オンラインでお試しください!

(完全なRacketソリューションを構成するものについてコンセンサスがあるかどうかはわかりませんので、純粋な関数が重要であるというMathematicaの慣習に従います。)

使い方

factorize分解をペアのリストとして(factorize 108)与える:gives '((2 2) (3 3))。ペアの2番目の要素は、(リストの先頭)と(リストの末尾)のcadr合成の省略形であるによって与えられます。carcdr

(cadr (argmax cadr list))2番目の要素の最大値を見つけるために愚かなことをしているように感じますが、maxリストに対しては(max (map cadr list))機能しません。私はラケットの専門家ではないので、これを行うための標準的なより良い方法があるかもしれません。

ラケット、93バイト

(λ(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し、我々はただの最高値を見つける(p n d)ためのd2とをn。(これを素数に制限する必要はありません。素数の力よりもうまく機能する複合力はないからです。)


私は、標準的な推測maxソリューションです(apply max (map cadr list)が、(cadr (argmax cadr list))残念ながら短いです。
ミシャラヴロフ


0

APL(NARS), 15 chars, 30 bytes

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

test:

  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 

comment:

{⌈/+/¨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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.