Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

いつまで素数が続くのか

$
0
0

午後のひとときに、数学の問題を解いてみる。

AとBには1桁の数が入り、
AB
AAB
AAAB
AAAAB

のように続くとき、
2桁から最大何桁まで素数でいられるか。
A、Bに入る数や桁数を求めよ。


シンキングタ~イム


まず、2桁以上の素数の一の位に着目すると、
1、3、7、9しかありえませんので、Bはこの4つのうちのいずれかとなります。

小さい方から調べてみましょう。

11 素数
111=3・37 合成数

13 素数
113 素数
1113=3・7・53 合成数

17 素数
117=32・13

19 素数
119=7・17

21=3・7 合成数

23 素数
223 素数
2223=32・13・19 合成数

27=33 合成数

29 素数
229 素数
2229=3・743 合成数

31 素数
331 素数
3331 素数
33331 素数
333331 素数
3333331 素数
33333331 素数
333333331=17・1907843 合成数

おそらく、これが最大だろうという予想します。

33=3・11 合成数

37 素数
337 素数
3337=47・71 合成数

39=3・13 合成数

41 素数

441=32・72 合成数


43 素数
443 素数
4443=3・1481 合成数

47 素数
447=3・149 合成数

49=72 合成数

51=3・17 合成数

53 素数
553=7・79 合成数

57=3・19 合成数

59 素数

559=13・43 合成数

61 素数
661 素数
6661 素数
66661=7・89・107 合成数

63=32・7 合成数


67 素数
667=23・29 合成数

69=3・23 合成数

71 素数
771=3・257 合成数

73 素数
773 素数
7773=3・2591 合成数

77=7・11 合成数

79 素数
779=19・41 合成数

81=34 合成数


83 素数
883 素数

8883=33・7・47 合成数


87=3・29 合成数

89 素数
889=7・127 合成数

91=7・13 合成数

93=3・31 合成数

97 素数
997 素数

9997=13・769 合成数

99=32・11 合成数

のように全部やって、
A=3、B=1で8桁までとしても良いのだが、素数判定は面倒なので、もっと効率よく枝刈りをしたい。

例えば、A=Bであると、ABは必ず11の倍数となってしまうので、11は良いが、他は合成数となる。111は合成数なので、これも枝刈り出来る。

例えば、B=3またはB=9に限定すると、4桁になると必ず3で割り切れ、合成数が確定して、4桁未満となる。といったように、B=3とB=9は4桁以上にはなり得ないことが確定するので、大幅な枝刈りが出来る。

そうなると、B=1とB=7だけを考えれば良いので、先の方法の半分くらいの計算で終わることだろう。


さて、この問題、10進数でしか考えてないけれども、他の進数ならば8桁を超えるものも見つかるのではなかろうか?

と考えるに至ったわけです。

とりあえず、プログラミングしてみたところ、8桁に到達するものは結構見つかりました。

例えば、38進数で、A=30(10)、B=31(10)

ここで書く(10)は、その前に書かれた数字は10進数ですよということです。
まぁ、面倒なんで、(10)は省きますね。

AB(38)=30・381+31=1171
AAB(38)=30・382+30・381+31=44491
AAAB(38)=30・383+30・382+30・381+31=1690651

といったように10進数に変換して、それを素数判定してみます。

1171 素数
44491 素数
1690651 素数
64244731 素数
2441299771 素数
92769391291 素数
3525236869051 素数
133959001023931=73・127・5407・2672323 合成数

まだ、n進数9桁が64ビットを超えないうちは、C言語のプログラムでも、素数判定は出来るのですが、超えてくると別の方法を考える必要が出てきますね。

例えば、290進数で、A=42(10)、B=277(10)
12457 素数
3544657 素数
1027882657 素数
298085902657 素数
86444911702657 素数
25069024393702657 素数
7270017074173702657 素数

とここまでは、64ビットの範囲でしたので、プログラムで確実に素数であることは確定しました。
しかし、ここからは64ビットを超えるので、フェルマーテストによる判定に切り替えました。

2108304951510373702657 合成数

といったようになります。

多倍長整数を実装して、素数判定していけばいいのだろうけど、実装に時間がかかりそうなので、今回はこの辺で。

さて、n進9桁以上になるようなものは見つかるのだろうか。


ではでは


Viewing all articles
Browse latest Browse all 5376

Trending Articles