マルチベースプライム

この挑戦の目的のために、多塩基素数は、基数10で書かれたときに、10より小さく1より大きい1つ以上の塩基でも素数である素数である。すべての1桁の素数は、多項式の素数です。
11は2進数で11が3であり、素数である(これは基底4と基底6でも素数である)ので、多塩基素数である。最初のいくつかの用語は次のとおりです:2,3,5,7,11,13,17,23,31,37,41,43,47,53,61

あなたのタスク:

入力として整数が与えられたときに、入力がマルチベース素数であれば真理値を、それ以外では真偽値を返す/出力するプログラムまたは関数を書く。

入力:

1〜10 ^ 12の整数です。

出力:

入力がマルチプルプライムであるかどうかに応じて、真実/偽の値を返します。

テストケース:

3    -> truthy
4    -> falsy
13   -> truthy
2003 -> truthy (Also prime in base 4)
1037 -> falsy (2017 in base 5 but not a prime in base 10)

得点:

This is ,
lowest score in bytes wins!

ベストアンサー

Python 2, 159 137 bytes

f=lambda n:p(n)*any(p(b(n,i))for i in range(2,10))
p=lambda n:all(n%x for x in range(2,int(n**0.5)+1))
b=lambda n,i:n and n%i+10*b(n/i,i)

2 – お試しください!

ovsのおかげで22バイトを節約できました。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です