274桁
4444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111
これを見つけるには約20時間のCPU時間を要し、プライムごとに約2分かかりました。対照的に、84桁のソリューションは約3分で見つけることができます。
84桁
444444444444444444444444444444444444444444444444441111111113333333333333333333333333
77777777999999999999999777777777(32桁)
66666666666666622222222222222333(32桁)
647777777777777777777777777(27桁)
44444441333333333333(20桁)
999996677777777777(18桁)
167777777777777(15桁)
素数性を確認する場合は、このツールをお勧めします。D。AlpernのECMアプレット
また、repdigitアプローチを使用します。これは、大きな値を見つける可能性が最も高いアプローチのようです。次のスクリプトは、アルゴリズムの倍数になり最も数字または切断上スキップ2、3、5、現在11 C / oをPeterTaylor(彼の寄与は約50%の効率を増加します)。
from my_math import is_prime
sets = [
(set('147'), set('0147369'), set('1379')),
(set('369'), set('147'), set('1379')),
(set('369'), set('0369'), set('17')),
(set('258'), set('0258369'), set('39')),
(set('369'), set('258'), set('39'))]
div2or5 = set('024568')
for n in range(3, 100):
for sa, sb, sc in sets:
for a in sa:
for b in sb-set([a]):
bm1 = int(b in div2or5)
for c in sc-set([b]):
if int(a+b+c)%11 == 0: continue
for na in xrange(1, n-1, 1+(n&1)):
eb = n - na
for nb in xrange(1, eb-bm1, 1+(~eb&1)):
nc = eb - nb
if not is_prime(long(a*(na-1) + b*nb + c*nc)):
continue
if not is_prime(long(a*na + b*(nb-1) + c*nc)):
continue
if not is_prime(long(a*na + b*nb + c*(nc-1))):
continue
if not is_prime(long(a*na + b*nb + c*nc)):
continue
print a*na + b*nb + c*nc
my_math.py
ここで見つけることができます:http://codepad.org/KtXsydxK
また、あなたも使用することができますgmpy.is_prime
:機能GMPYプロジェクト
プロファイリングの結果としてのいくつかの小さな速度の改善。4つの候補の最長ための素数のチェックは、最後に移動されているxrange
置き換えrange
、およびlong
置き換えint
型キャストを。int
評価された式の結果がの場合、不要なオーバーヘッドがあるようlong
です。
割り切れるルール
LET Nは、フォームのpostitive整数であり、A ... AB ... BC ... C、、B及びCは数字を繰り返します。
2と5に
よる-2と5による可分性を避けるため、cは集合[ 0、2、4、5、6、8]に含まれない場合があります。さらに、bがこのセットのメンバーである場合、cの長さは2以上である場合があります。
3
- N = 1(mod 3)の場合、Nに[ 1、4、7 ]を含めることはできません。これらのいずれかを削除すると3の倍数になります。N = 2(mod 3)および[ 2、5、8]についても同様です。この実装では、これを少し弱めた形式を使用します。Nに[1、4、7]のいずれかが含まれる場合、[ 2、5、8 ]のいずれも含まれない場合があります。さらに、Nは[ 0、3、6、9]のみで構成されない場合があります。これは主に同等のステートメントですが、たとえばa、b、cなどのいくつかの些細なケースを考慮に入れていますそれぞれ3回の倍数で繰り返されます。
11
- PeterTaylorが指摘しているように、Nがaabbcc ... xxyyzzの形式である場合、つまり、偶数回繰り返される数字のみで構成されている場合、11:a0b0c ... x0y0zで割り切れます。この観察により、検索スペースの半分が削除されます。場合Nが奇数の長さであり、その後の長さ、B及びCは、全て(75%サーチスペースの削減)も奇数でなければならず、場合Nは偶数長さであり、その後のいずれかのみ、B又はCが偶数であってもよいです長さ(25%の検索スペース削減)。
- 推測
次の場合、ABCは、の倍数である11、例えば407、その後のすべての奇数繰り返し、B及びCはまた、の倍数であろう11。これは、11ルールによる上記の分割可能性の範囲外です。実際、明示的に許可されているのは、奇数の繰り返しのみです。この証拠はありませんが、体系的なテストでは反例を見つけることができませんでした。比較:444077777、44444000777、44444440000077777777777を、など誰もが、この推測を証明または反証して自由に感じることがあります。その後、aditsuはこれが正しいことを実証しました。
その他の形態
randomraが追求し
ていた形式の2組の繰り返し数字a ... ab ... bは、はるかにまれなようです。10 1700未満のソリューションは7つしかなく、そのうち最大のものは長さが12桁です。
4桁の繰り返し数字
この形式の数字a ... ab ... bc ... cd ... dは、私が探していた数字よりも密に分布しているように見えます。3組の繰り返し数字を使用する32のソリューションと比較して、10 100未満の69のソリューションがあります。間のもの10 11と10 100は、以下の通りです。
190000007777
700000011119
955666663333
47444444441111
66666622222399
280000000033333
1111333333334999
1111333333377779
1199999999900111
3355555666999999
2222233333000099
55555922222222233333
444444440004449999999
3366666633333333377777
3333333333999888883333
4441111113333333333311111
2222222293333333333333999999
999999999339999999977777777777
22222226666666222222222299999999
333333333333333333339944444444444999999999
559999999999933333333333339999999999999999
3333333333333333333111111111111666666666611111
11111111333330000000000000111111111111111111111
777777777770000000000000000000033333339999999999999999999999999
3333333333333333333333333333333333333333333333336666666977777777777777
666666666666666666611111113333337777777777777777777777777777777777777777
3333333333333333333888889999999999999999999999999999999999999999999999999933333333
なぜそうなるべきかについて、単純な発見的議論があります。デジタルの長さごとに、予想される解の数が最大になる反復セットの数(つまり、3反復セット、または4反復セットなど)があります。比率として考えられる追加の可能な解決策の数が、チェックされる追加の数が素数である確率を上回る場合に、遷移が発生します。チェックする可能性の指数的な性質と素数分布の対数的な性質を考えると、これは比較的迅速に起こります。
たとえば、300桁のソリューションを見つけたい場合、4組の繰り返される数字をチェックすると、3組よりもはるかに多くのソリューションが生成され、5組のソリューションはまだ可能性が高くなります。ただし、自由に使えるコンピューティング能力では、4セットで100桁をはるかに超えるソリューションを見つけることは、5または6はもちろんのこと、私の能力の範囲外です。
9901444133
(1つの9の削除)は素数(7 x 1414492019
)ではありません。ただし、前の例は正しかったです。