- ベストアンサー
ある整数を割り切れる素数を知るには?
例えば2613という整数を割り切れる素数を全て知る方法はありますか?
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
全部調べる.基本はこれしかない. 素因数分解は素数の約数(素因数)が分かって初めてできるのだから 素因数分解してから素因数を求めるというのは本末転倒. ただ,全部調べるといっても 馬鹿正直に2から2613まで全部調べるのはやりすぎで 実際は 2から(2613)^{1/2}(2613の平方根のうちの正の方)までの 整数で素数であるものを順番に調べればいい. そして,その範囲の整数が素数であるか一つ一つ調べるのは無駄で 先に,必要な範囲の素数をエラトステネスの篩で調べ上げておくとよい. そうするとそれなりの速さで素因数分解はできる. コンピュータで計算させるときはこんな方法でざっくりやってしまう. これくらいなら慣れてれば,30分くらいもあればプログラムできると思う. #個人的にはこの手のプログラムはHaskelで書くのがよいと思う. 人間がやるなら,直観もあるから 思いついたらそれらしい数でやってみるというのは まさに王道.
その他の回答 (5)
- ta20000005
- ベストアンサー率46% (30/64)
もう答えが出ていますので、ちょっとおまけな話を。ハーディが見つけた、2以上の自然数Nの最大の素因数を求める式が知られています。したがって、それでNを割って、その数で先の式をまた当てはめて、を繰り返せば、素因数分解できてしまいます。 ただし、その式で最大の素因数を求めることは素数列の一般項を使ってn番目の素数を求めるのと同じく意味がなく実用性もありませんが。
お礼
面白いお話をありがとうございます。素数て不思議ですね。
- stomachman
- ベストアンサー率57% (1014/1775)
「全部調べる」とは言っても、もし2613を割り切る素数が存在するのなら、そのうちで最小のものは√(2613)=51.1… 以下です。 だから、51より小さい素数だけ、つまり高々十数個の素数pについて調べれば、素因数が(もしあれば)見つかることになります。 一般に、ある数nについて調べるには、√n以下の素数で割り切れるかどうかを調べます。 (1) もしどれでも割り切れなかったら元の数nは素数です。 (2) もし割り切れる素数pが見つかったら、その商(つまりその割り算の答)qが√q以下の素数で割り切れるかをどうか調べます。 これを繰り返せば良いのです。 nがあまり大きな数でなく、また√n以下の素数の表を持っているのであれば、実際上、大した手間は掛かりません。しかしながら、nがたとえば何十桁という大きさになると手計算では到底やってられません。さらに大きくなると、コンピュータでも手に負えなくなります。
お礼
実質51以下!ですか。それならかなり楽になりますね。もっと桁が大きいと途方にくれます。素数て不思議ですね。有難うございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「素数かどうか」だけなら効率的な方法も存在するけど, 少なくとも今のところ素因数を見付ける効率的な方法は知られていない. つまり, 本質的には #1 の通り「全部試す」しかない. まあ, このくらいの数字だとふるうかどうかも微妙だけど.
お礼
素数て不思議ですね。このくらいの数字なら地道に探す手もありますが、大きな数字でもできるような仕組みなどが存在すると思ってしまいました。ありがとうございました。
- mojitto
- ベストアンサー率21% (945/4353)
直感…ですかね。 2613を見たとき、なんとなく13の倍が26だなぁ~ 13で割れるやん!…みたいに。 二桁まで分解できれば、九九からなんとかなりますよね。
お礼
勘なんですね。ありがとうございます。
- Knotopolog
- ベストアンサー率50% (564/1107)
2613を素因数分解すれば,それが答えです.
お礼
ご回答ありがとうございました。
お礼
素数てすごいですね。知識の量に脱帽です。全部調べるのは大変ですがその方法でしたら少し省略できるんですね。ありがとうございます。