素因数分解における素数


9

PPCGで別のプライムチャレンジが行われるのを見ました。いくつかのプライムが大好きです。それから私は紹介文を読み間違えて、ここで創造的な頭脳が何を思いついたのか疑問に思いました。

提起された質問は取るに足らないものだったことがわかりますが、私が読んだ(誤った)質問についても同じことが言えるのでしょうか。


6は2 ^ 1 * 3 ^ 1で表すことができ、50は2 ^ 1 * 5 ^ 2で表すことができます(^は指数を示します)。

あなたのタスク:

プログラムまたは関数を記述して、この数の表現にいくつの異なる素数があるかを判別します。

入力:

1 <n <10 ^ 12の整数n。通常の方法で取得されます。

出力:

nの一意の素因数表すために必要な個別の素数の数。

テストケース:

Input      Factorisation      Unique primes in factorisation representation
24         2^3*3^1            2 (2, 3)
126        2^1*3^2*7^1        3 (2, 3, 7)
8          2^3                2 (2, 3)
64         2^6                1 (2) (6 doesn't get factorised further)
72         2^3*3^2            2 (2, 3)
8640       2^6*3^3*5^1        3 (2, 3, 5)
317011968  2^11*3^5*7^2*13^1  6 (2, 3, 5, 7, 11, 13)
27         3^3                1 (3)

これはOEISシーケンスではありません。

得点:

これは、バイト単位の最低スコアが勝ちます!


の期待される結果は64何ですか?それは2 (2,3)(6は2 * 3として表すことができるため)または1 (2)(6を無視して)ですか?
Emigna

以下のために64予想される結果1(2)です。私はそれを再帰的に行うという考えが好きですが、それは私が元の質問を読む方法ではありません。私8640は適切なテストケースだと思いましたが、もっと明確にすべきでした-ありがとう。
pbeentje

これはOEISシーケンスではないと主張しています。A001221、(小さい)オメガ関数の値ではありませんか?
グレイテイラー

A001221も同様ですが、この演習では指数が素数として含まれているため、用語8と9(ここでは2、A001221 1)で分岐し始めます。
pbeentje

ああ、なるほど。素因数分解を書き留めてから、私が書いた素数の数を確認します(それらが果たした役割に関係なく)。あなたがさらに一歩進んで指数を因数分解するとどうなるのだろう...
グレイ・テイラー

回答:


5

Mathematica、39バイト

Count[Union@@FactorInteger@#,_?PrimeQ]&

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

マーティン・エンダーのおかげで(-11バイト)


CasesSelect(-4バイト)よりも短いことが判明:(Tr[1^Union@Cases[FactorInteger@#,_?PrimeQ,2]]&新しいカーネルですべてのテストケースに合格)
JungHwan Min

いかがCount[Union@@FactorInteger@#,_?PrimeQ]&ですか?(すべてのテストケースをチェックしたわけではありません。)
マーティンエンダー2017年

@MartinEnderはうまくいくようです。すべてのテストケースにも合格します。
JungHwan Min

5

05AB1E9 7バイト

Kevin Cruijssenのおかげで2バイト節約

ÓsfìÙpO

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

説明

Ó        # push the prime factor exponents of the input
 sfì     # prepend the prime factors of the input
    Ù    # remove duplicates
     p   # check each if it is prime
      O  # sum

1
€pO素因数と指数をマージした後に使用することにより-1バイト:ÓsfìÙ€pO
Kevin Cruijssen

@KevinCruijssen:ありがとう!必要ないので、実際には2を節約します。
Emigna

ああ、もちろん..
わあ



4

Gaia、6バイト

ḋ_uṗ¦Σ

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


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

  • _ リストをフラット化します。

  • u 重複する要素を削除します。

  • ṗ¦要素をマップし、素数が見つかった場合は1を返し、そうでない場合は0を返します。

  • Σ リストを合計します。


3

CJam(13バイト)

{mFe__&:mp1b}

オンラインテストスイート

これは非常に簡単です。多重度で素数を取得し、個別の値に減らし、素数をフィルタリングし、カウントします。

悲しいことにマーティンは、彼はまた以来のことを観察することによって1バイトの節約を提供しなかったが、私のオリジナルの答えで穏やかに面白いトリックによって処理されなかったいくつかの例を指摘mpできます01、それがマッピングされたというよりもフィルタリングすることができます。










0

J、20バイト

3 :'+/1 p:~.,__ q:y'

手で数えるので笑これがオフか教えてください。

ゴルフの提案はありますか?

退屈な提出:素因数分解表をフラット化して素数を数えます。



0

JavaScript(ES6)、145バイト

n=>{for(a=[b=l=0],q=n,d=2;q>=2;)q%d?(b&&(a.push(0),l++),d++,b=0):(q/=d,a[l]++,b=1);for(i in a){for(d=1,e=a[i];e%d;d++);e-d||n%e&&l++};return l+1}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.