偶数は素数になることができますか?


24

シーケンス

誰でも知っているのは、偶数の素数だけです2。うん しかし、でn連結されると素数n-1なる特定の偶数があります。

まず1第一に、10素数ではないので、リストにありません。221)および332)でも同様です。しかし、4作品のため43素数であるので、シーケンスの最初の番号ですa(1) = 4。次の番号その作品(いずれも665)も887)の仕事は)ある10ので、109素数であるので、a(2) = 10。それから222221がプライムなので、さらに束をスキップしa(3) = 22ます。等々。

明らかに、このシーケンス内のすべての項は偶数です。これは、n連結された奇数が偶数にn-1なる(に3変わるなど32)ため、素数にならないためです。

これは、OEISのシーケンスA054211です。

チャレンジ

nこのシーケンスのどこかに収まる入力番号(つまり、n連結されたn-1素数)が与えられると、このシーケンスでの位置を出力します。0インデックスまたは1インデックスのいずれかを選択できますが、提出の際にどちらを指定してください。

ルール

  • 入力と出力は、言語のネイティブ整数型に適合すると仮定できます。
  • 入力と出力は、任意の便利な形式で指定できます
  • 完全なプログラムまたは機能のいずれかが受け入れられます。関数の場合、出力する代わりに出力を返すことができます。
  • 可能であれば、他の人がコードを試すことができるように、オンラインテスト環境へのリンクを含めてください!
  • 標準的な抜け穴は禁止されています。
  • これはので、通常のゴルフルールがすべて適用され、最短のコード(バイト単位)が勝ちます。

以下の例は1から始まります。

n = 4
1

n = 100
11

n = 420
51

1
なぜあなたは逆にそれをしなければならないのですか?cQuentsにはそのモードはありません:(
スティーブン

4
@StepHenペースを変えるためだけに。いつもとは違う何か。
AdmBorkBork

9
これは意思決定の問題としてはるかに良いと思います。
小麦ウィザード

4
2は2で割り切れる唯一の素数であるだけでなく、3は3で割り切れる唯一の素数でもあり、5は5で割り切れる唯一の素数でもあります。一般に、素数nは常にで割り切れる唯一の素数nです。特別なことではありません-それが素数の働きです。
エソランジングフルーツ

回答:


11

ゼリー 8  7 バイト

ḊżṖVÆPS

シーケンスメンバーを取得し、シーケンス内のインデックスを返すモナドリンク。

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

どうやって?

ḊżṖVÆPS - Link: number, n
Ḋ       - dequeue (implicit range) = [ 2   , 3   , 4   ,... ,              n         ]
  Ṗ     - pop (implicit range)     = [   1 ,   2 ,   3 ,... ,                  n-1   ]
 ż      - zip                      = [[2,1],[3,2],[4,3],... ,             [n , n-1]  ]
   V    - evaluate as Jelly code   = [ 21  , 32  , 43  ,... ,         int("n"+"n-1") ]
    ÆP  - is prime? (vectorises)   = [  0  ,  0  ,  1  ,... , isPrime(int("n"+"n-1"))]
      S - sum

TIO私のためにダウンしていない、多分それはちょうど戻ってきた?
コナーオブライエン

1
2分前に修正 :)
ジョナサンアラン

綺麗な!そのzip(head(), pop())トリックは本当にクールです。:)
DJMcMayhem

その7バイトはどのエンコーディングにありますか?
-kylefinn

1
@kylefinn Jellyには独自のコードページがあり、ヘッダーのバイトリンクをクリックして表示します。
ジョナサンアラン

8

Haskell80 75 70バイト

Laikoniのおかげで5バイト節約

p x=all((>0).mod x)[2..x-1]
g n=sum[1|x<-[4..n],p$read$show=<<[x,x-1]]

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


1
1 p x=all((>0).mod x)[2..x-1]で失敗する短い素数テストを使用できると思いますが、この場合は問題になりません。
ライコニ

1
show x++show(x-1)に短縮することもできますshow=<<[x,x-1]
ライコニ

@Laikoniヒントをありがとう!私showはもっと短い方法でできると思っていましたが、何らかの理由で連結マップを考えていませんでした。
小麦ウィザード

6

ゼリー12、10、8つのバイト

;’VÆPµ€S

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

@ nmjmcman101のおかげで1-2バイトが節約され、@ Dennisのおかげで2バイトが節約されました!

説明:

     µ€   # For N in range(input()):
;         #   Concatenate N with...
 ’        #   N-1
  V       #   And convert that back into an integer
   ÆP     #   Is this number prime?
       S  # Sum that list 

Rをドロップして暗黙の範囲を使用できますか?
nmjcman101

@ nmjcman101それが事だとは全く知りませんでした。ありがとう!
DJMcMayhem

5

05AB1E9 8 7バイト

コード

ƒNN<«pO

05AB1Eエンコードを使用します。オンラインでお試しください!

説明

ƒ          # For N in [0 .. input]..
 NN<«      #   Push n and n-1 concatenated
     p     #   Check for primality
      O    #   Sum the entire stack (which is the number of successes)

もちろん、これは05AB1Eがエラーを無視するという事実を利用しています...私はあなた'0-1'が素数であるかどうかをチェックできないと思うからです。
エリックアウトゴルファー

5

13 11 10バイト

1インデックス付きソリューション:

#ȯṗdS¤+d←ḣ

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

非ゴルフ/説明

         ḣ -- in the range [1..N]
#          -- count the number where the following predicate is true
        ←  --   decrement number,
    S  d   --   create lists of digits of number and decremented 
     ¤+    --   concatenate,
   d       --   interpret it as number and
 ȯṗ        --   check if it's a prime number

-3バイトをありがとう@Zgarb !


1
£İpはと同等です。また、の#…ḣ代わりに1バイトを保存できます£f…N
-Zgarb


4

Pyth、12バイト

smP_s+`d`tdS

オンラインでお試しください!または、すべてのテストケースを確認します。


どうやって?

smP_s+`d`tdSQ  -> Full Program. Takes input from Standard Input. Q means evaluated input
                  and is implicit at the end.

 m         SQ  -> Map over the Inclusive Range: [1...Q], with the current value d.
    s+`d`td    -> Concatenate: d, the current item and: td, the current item decremented. 
                  Convert to int.
  P_           -> Prime?
s              -> Sum, counts the occurrences of True.

4

Japt15 14 12 11 9 8バイト

1インデックス付き。

ÇsiZÄÃèj

それを試してみてください

Ç            :Map each Z in the range [0,input)
 s           :  Convert to string
  i          :    Prepend
   ZÄ        :    Z+1
     Ã       :End map
      è      :Count
       j     :  Primes


ああ!なぜ私がこのようなblindspotを持っていないÆÇ?!ありがとう、@ Oliver。コンピューターに戻ったら更新します。
シャギー

2o+X(末尾のスペースを使用)は、の代わりに機能しますが[XXÉ]、自動バランス[]ブラケットに移動した場合、ソリューションは1バイト短くなります。(実際には2ができるのでõ_ZÉ]¬nÃèj
ETHproductions

@ETHproductions:最近では、配列を操作するときに最初に行うことは、自動バランスが追加されているかどうかを確認することです[]!:D
シャギー

何らかの理由で、セミコロンも完全に機能しなくなったと思うので、修正を試みます。明日の午後までチャンスがあるとは思わない。
-ETHproductions

3

ローダ、73バイト

{seq 3,_|slide 2|parseInteger`$_2$_1`|{|i|[1]if seq 2,i-1|[i%_!=0]}_|sum}

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

1インデックス付き。ストリームを使用して入出力を行います。

説明:

{
seq 3,_| /* Create a stream of numbers from 3 to input */
slide 2| /* Duplicate every number except the first and the last
            to create (n-1,n) pairs */
parseInteger`$_2$_1`| /* Concatenate n and n-1 and convert to integer */
{|i| /* For every i in the stream: */
    [1]if seq 2,i-1|[i%_!=0] /* Push 1 if i is a prime
                                (not divisible by smaller numbers) */
}_|
sum /* Return the sum of numbers in the stream */
}

2

Pyth、14バイト

lfP_Tms+`d`tdS

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

説明

              Q    # Implicit input
             S     # 1-indexed range
     m             # For d in range [1, Q]...
      s+`d`td      # Concatenate d and d - 1
 fP_T              # Filter on primes
l                  # Return the length of the list

あなたは数秒で私を打ち、私はあなたを数バイトで打ちました:P
Mr. Xcoder

@ Mr.Xcoder私の最初のバージョンはlfTmP_s+`d`tdS、当時自分であなたのトリックを見つけられなかったのは残念です:)
ジム


2

C、99 94バイト

1が索引付けされました。計算量が非常に多い素数テストを書くのは苦痛ですが、バイトは結局バイトです。

GCC 7.1.1を使用して最適化せずにマシンでコンパイルすると、本当に壊れやすいものを許可すると、次の94バイトが機能します(@Conor O'Brienに感謝)

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}

それ以外の場合、これらのはるかに堅牢な99バイトは仕事をします

i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}return c;}

完全なプログラム、もう少し読みやすい:

i,c,m,k;
f(n){
    c=i=1;
    for(;++i<n;c+=m==k){
        for(k=m=1;m*=10,m<i;);
        for(m=i*m+i-1;++k<m&&m%k;);
    }
    return c;
}

int main(int argc, char *argv[])
{
    printf("%d\n", f(atoi(argv[1])));
    return 0;
}

コンパイラによっては、使用していくつかのバイトを保存することができるかもしれn=c;代わりにreturn c;i,c,m,k;f(n){c=i=1;for(;++i<n;c+=m==k){for(k=m=1;m*=10,m<i;);for(m=i*m+i-1;++k<m&&m%k;);}n=c;}
コナー・オブライエン

最適化レベルによって異なると思われるものを使用したいとは言えません。GCCを使用すると、最適化なしで-O0が機能し、他の最適化フラグでは機能しません。興味深いことに、-O1 -O2および-O3は0を返し、-Osでは1を返し、-Ogではn-1を返します。
アルグミー

答えの中で、プログラムのコンパイル方法をいつでも指定できます。
コナーオブライエン

少し安さを感じます。しかし、代替手段を追加できます。
アルグミー

私は理解していますが、それをすることを悪く感じることはありません
コナー・オブライエン


1

Mathematica、77バイト

Position[Select[Range@#,PrimeQ@FromDigits[Join@@IntegerDigits/@{#,#-1}]&],#]&

0

QBIC、25バイト

[:|p=p-µa*z^_l!a$|+a-1}?p

説明

[:|     FOR a = 1 to <n>
p=p-    Decrement p (the counter) by
µ       -1 if the following is prime, or 0 if not
        For the concatenating, we multiply 'a' by 10^LENGTH(a), then add a-1$┘p
        Example 8, len(8) = 1, 8*10^1 = 80, add 8-1=7, isPrime(87) = 0
a*z^_l!a$|+a-1
}       Close the FOR loop - this also terminates the prime-test
?p      Print p, the 0-based index in the sequence.

これは、かなりの複雑な数学を使用し、適切な測定のために文字列にキャストされます。バージョンハットを作成すると、文字列ベースの連結のみが1バイト長くなります。

[:|A=!a$+!a-1$┘p=p-µ!A!}?p

0

PHP、203バイト

<?php $n=($a=$argv[1]).($a-1);$p=[2];$r=0;for($b=2;$b<=$n;$b++){$x=0;if(!in_array($b,$p)){foreach($p as $v)if(!($x=$b%$v))break;if($x)$p[]=$b;}}for($b=1;$b<=$a;$b++)if(in_array($b.($b-1),$p))$r++;die $r;

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

出力に1から始まるインデックスを使用します。TIOリンクには、読み取り可能なバージョンのコードがあります。


0

Ruby、42 + 9 = 51バイト

-rprime -nフラグを使用します。1インデックス付き。

条件を満たす入力以下のすべての数値(または技術的には、条件を満たすすべての数値)をカウントすることで機能しn-1ます。入力はシーケンス内にあることが保証されているため、そのような7「素数にならない」ランダム入力によるエラーのリスクはありません。

p (?3..$_).count{|i|eval(i.next+i).prime?}

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




0

Java 8、108バイト

n->{for(long r=0,q=1,z,i;;){for(z=new Long(q+""+~-q++),i=2;i<z;z=z%i++<1?0:z);if(z>1)r++;if(q==n)return r;}}

0インデックス付き

説明:

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

n->{                             // Method with integer parameter and long return-type
  for(long r=0,                  //  Result-long, starting at 0
      q=1,                       //  Loop integer, starting at 1
      z,i;                       //  Temp integers
      ;){                        //  Loop indefinitely
    for(z=new Long(q+""+~-q++),  //   Set z to `q` concatted with `q-1`
        i=2;i<z;z=z%i++<1?0:z);  //   Determine if `z` is a prime,
      if(z>1)                    //   and if it indeed is:
        r++;                     //    Increase the result-long by 1
      if(q==n)                   //   If `q` is now equal to the input integer
        return r;}}              //    Return the result

0

スタックス、10 バイト

1-インデックス付き

Äm▬á┌╕|°φ♦

ファイル名を指定して実行とデバッグそれ 説明

Rxr\{$e|pm|+         #Full program, unpacked, implicit input  (Example (4))
R                    #Create [1 to input] range  (ex [1,2,3,4] )             
 x                   #Copy value from x register (ex (4) )
  r                  #Create [0 to input-1] range (ex [0,1,2,3)
   \                 #Create array pair using the range arrays (ex [[1,0],[2,1],[3,2],[4,3]])
    {    m           #Map block
     $e|p            #To string, eval string (toNum), isPrime (ex [1,0] => "10" => 10 => 0)
          |+         #Sum the array to calculate number of truths (ex [0,0,0,1] => 1)

0

きちんとした、33バイト

index({n:prime(n.n-1|int)}from N)

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

説明

基本的な考え方は、有効な数値のシーケンスを作成し、カリー化されたインデックス関数を返すことです。

index({n:prime(n.n-1|int)}from N)
      {n:                }from       select all numbers `n` from...
                               N     the set of natural numbers, such that:
               n.n-1                     `n` concatenated with `n-1`
                    |int                 ...converted to an integer
         prime(         )                ...is prime
index(                          )    function that returns index of input in that sequence
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.