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

素因数分解のテクニックを磨く

$
0
0

午後のひとときに、素因数分解のテクニックを磨こうかと思う。

問題1
1254-82・36
を手計算で素因数分解せよ。

問題2
1254+82・36
を手計算で素因数分解せよ。


シンキングタ~イム


まずは普通に計算してみます。

1254-82・36 = 244093969
1254+82・36 = 244187281

9桁の素因数分解を手計算でやってみたいですか?
私はやりたくないです。
というわけで、もう少し簡単にならないかを考えます。

問題1について、
x2-y2 = (x+y)(x-y)
という因数分解が使えるということが解ります。
1254-82・36 = (1252)2-82・(33)2
= (1252)2-82・(33)2
= 156252-(8・(33))2
= 156252-2162
= (15625+216)(15625-216)
= 15841・15409
ここで、ユークリッドの互除法より、
125のの素因数は5だけ、8の素因数は2だけ、3の素因数は3だけなので、
これらでは15841と15409は割り切れないということが解りますので、試す必要がないということです。
まぁ、試してもそれほど時間の掛かるものではありませんので、試してもいいかもしれません。
まずは、15841の素因数分解を考えます。
7以上の素数についての倍数判定をします。
7・11・13 = 1001
ということを利用するのが一般的でかなり効率的です。
15841を下から3桁ずつに区切って、符号を互い違いにつけて、
-15+841 = 826
826が7、11、13で割り切れるかを考えます。
826は7の倍数ですので、15841は7で割り切れます。
15841÷7 = 2263
もう一度、同じことをやってみます。
-2+263 = 261
261が7、11、13で割り切れるかを考えます。
いずれでも割り切れませんので、2263は7、11、13を素因数に持ちません。
2263が17の倍数判定をします。
2263 → 226+3×-5
211 → 21+1×-5
16
よって、17の倍数ではありません。
続いて、19の倍数判定をします。
2263 → 226+3×2
232 → 23+2×2
27
よって19の倍数ではありません。
続いて、23の倍数判定をします。
2263 → 226+3×7
247 → 24+7×7
73
73は23の倍数ではありません。
続いて、2263が29の倍数判定をします。
2263 → 226+3×3
235 → 23+5×3
38
38は29の倍数ではありません。
続いて、2263が31の倍数判定をします。
2263 → 226+3×-3
217 → 21+7×-3
0
2263は31の倍数です。
2263÷31 = 73
73は素数ということで、
15841 = 7・31・73
続いて、15409が素因数分解を考えます。
-15+841 = 826
826は7、11、13で割り切れませんので、15409は7、11、13を素因数に持ちません。
続いて、17の倍数判定をします。
15409 → 1540+9×-5
1495 → 149+5×-5
124
124は17の倍数ではありませんので、15409は17の倍数ではありません。
続いて、19の倍数判定をします。
15409 → 1540+9×2
1558 → 155+8×2
171 → 17+1×2
19
19は19の倍数ですので、15409は19の倍数です。
15409÷19 = 811
続いて、23の倍数判定をやってみます。
811 → 81+1×7
89
89は23の倍数ではありませんので、811は23の倍数ではありません。
次の素数は29ですが、292 = 841で、811以上なので、ここまで。
ということで、
15409 = 19・811
よって、
1254-82・36 = 7・19・31・73・811
と素因数分解出来ました。


問題2について、問題1のような因数分解は出来ません。
さてどうしたものか。
x3+y3 = (x+y)(x2-xy+y2)
が出来ますね。
1254+82・36 = (54)3+(22)3・(32)3
= 6253+363
= (625+36)(6252-625・36+362)
= 661×369421
まずは661の素因数分解を考えます。
262 = 676なので、23までの素数の倍数判定をすればよい。
(省略します。)
いずれの倍数でもないので、661は素数です。
続いて369421の素因数分解を考えます・
7、11、13の倍数判定をします。
-369+421 = 52
52は13の倍数なので、369421は13で割り切れます。
369421÷13 = 28417
1692 =  28561
28561-28417 = 144 = 122
28417 = (169+12)(169-12) = 181×157
181も157も素数なので、ここまで。
ということで、
369421 = 7・157・181
よって、
1254+82・36 = 7・157・181・661
と素因数分解出来ました。


さて、100までの素数は25個ありますが、それぞれの倍数判定を考えてみたいと思う。

2は1の位が偶数なら2の倍数

3は各桁の和が3の倍数なら3の倍数

5は1の位が0か5なら5の倍数

7、11、13は下から3桁ずつ区切って、符号を入れ替えながら足した値が、
7の倍数なら元の数も7の倍数、
11の倍数なら元の数も11の倍数、
13の倍数なら元の数も13の倍数。

これくらいまでは知名度が高いかと思います。

2・5 = 10から、
2n・5n = 10n 
を利用して、それぞれ
xの倍数判定として、
n=1のとき、
 下1桁が2の倍数ならば、xは2の倍数
 下1桁が5の倍数ならば、xは5の倍数
n=2のとき、
 下2桁が4の倍数ならば、xは4の倍数
 下2桁が25の倍数ならば、xは25の倍数
n=3のとき、
 下3桁が8の倍数ならば、xは8の倍数
 下3桁が125の倍数ならば、xは125の倍数
・・・
n=mのとき、
 下m桁が2mの倍数ならば、xは2mの倍数
 下m桁が5mの倍数ならば、xは5mの倍数
と考えることが出来る。

3の倍数と同様に、
各桁の和が9の倍数ならば、元の数も9の倍数

1001 = 7・11・13
の他にも同様の桁数区切りを考えると、
10001 = 73・137
100001 = 11・9091
1000001 = 101・9901
10000001 = 11・909091
100000001 = 17・5882353
1000000001 = 7・11・13・19・52579
10000000001 = 101・3541・27961
100000000001 = 112・23・4093・8779
1000000000001 = 73・137・99990001
10000000000001 = 11・859・1058313049
100000000000001 = 29・101・281・121499449
1000000000000001 = 7・11・13・211・241・2161・9091
10000000000000001 = 353・449・641・1409・69857
100000000000000001 = 11・103・4013・21993833369
1000000000000000001 = 101・9901・999999000001
など考えられるが、使い勝手が良いかは別問題だろう。


2桁以上の素数の一の位は、1、3、7、9のいずれかですので、一の位で場合分けして考えます。

一の位が1の2桁以上の数を考えます。
11 -1 素数
21 -2 合成数
31 -3 素数
41 -4 素数
51 -5 合成数
61 -6 素数
71 -7 素数
81 -8 合成数
91 -9 合成数

と十の位にマイナスを付けた数を利用します。

例)
31の倍数かを判定するには、31の十の位の3にマイナスを付けた-3
244093969が31の倍数かを判定する。
244093969 → 24409396+9×-3
24409369 → 2440936+9×-3
2440909 → 244090+9×-3
244063 → 24406+3×-3
24397 → 2439+7×-3
2418 → 241+8×-3
217 → 21+7×-3
0
このように、1の位を削った数に1の位に-3を掛けたものを足すという操作を繰り返して桁数を減らすことが出来ます。
どこかのタイミングで、31の倍数か否かが判定できれば、そこで終了して構いません。
素直に割り算をするか、この方法を使うかは、微妙かもしれませんが、覚えておいて損はないでしょう。

続いて、一の位が9の2桁以上の数を考えます。
19 2 素数
29 3 素数
39 4 合成数
49 5 合成数
59 6 素数
69 7 合成数
79 8 素数
89 9 素数
99 10 合成数

と十の位に1を加えたものを利用します。

例)
19の倍数かを判定するには、19の十の位の1に1を加えた2
244093969が19の倍数かを判定する。
244093969 → 24409396+9×2
24409414 → 2440941+4×2
2440949 → 244094+9×2
244112 → 24411+2×2
24415 → 2441+5×2
2541 → 245+1×2
247 → 24+7×2
38 → 3+8×2
19
244093969は19の倍数です。

続いて、一の位が3の2桁以上を考えます。
13 4 素数
23 7 素数
33 10 合成数
43 13 素数
53 16 素数
63 19 合成数
73 22 素数
83 25 素数
93 28 合成数

十の位を3倍して+1する。

例)
244093969が73の倍数かを判定する。
244093969 → 24409396+9×22
24409594 → 2440959+4×22
2441047 → 244104+7×22
244258 → 24425+8×22
24601 → 2460+1×22
2482 → 248+2×22
292 → 29+2×22
73
244093969は73の倍数です。

最後に、一の位が7の2桁以上の数を考えます。
17 -5 素数
27 -8 合成数
37 -11 素数
47 -14 素数
57 -17 合成数
67 -20 合成数
77 -23 合成数
87 -26 合成数
97 -29 素数

掛けて足す数が2桁と大きくなってしまったので、面倒ですが紹介しておきます。
十の位を-3倍して-2する。

例)
244187281が157の倍数かを判定する。
244187281 → 24418728+1×-47
24418681 → 2441868+1×-47
2441821 → 244182+1×-47
244135 → 24413+5×-47
24178 → 2417+8×-47
2041 → 204+1×-47
157
244187281は157の倍数です。

別に2桁である必要もありませんね。

こんな方法覚えきれないよ。というかもしれませんので、
覚え方のコツです。

一の位が1に場合、掛けて足す数は0から
1 11 21 31 41 …
0  1  2  3  4 …


一の位が9の場合、10引いた-1から、掛けて足す数は0から-1ずつ増やす。
-1  9 19 29 39 …
 0 -1 -2 -3 -4 …


一の位が3の場合、掛けて足す数は1から3ずつ増やす。
3 13 23 33 43 …
1  4  7 10 13 …


一の位が7の場合、10引いた-3から、掛けて足す数は1から-3ずつ増やす。
-3  7 17 27  37 …
 1 -2 -5 -8 -11 …


こんな感じで覚えればと思います。


もう一つの素因数分解のテクニックとして、

28417の素因数分解で、
1692 =  28561
28561-28417 = 144 = 122
28417 = (169+12)(169-12) = 181×157

ということをやりました。

偶数の素数は2のみなので、他の素数は奇数です。

2の倍数判定は簡単ですので、おそらく済んでいることでしょう。
残すは奇素数の倍数判定のみということでもあります。

奇数pとqがあったとして、
pとqの中間値、(p+q)/2が正の整数として必ず存在します。
p = 2m+1
q = 2n+1
とおいて、
((2m+1)+(2n+1))/2 = (2(m+n)-2)/2 = m+n-1
と必ず正の整数になります。
つまり、
((m+n-1)+(p-(m+n-1)))((m+n-1)+(q-(m+n-1))) = pq
ということです。

当然、p=qとなる場合もあります。

昨日の記事の、

201601の素因数分解で、
4502 =  202500
202500-201601 = 899 = 2×450-1
4492 = 201601

という感じです。

a,b,cは1桁の整数として、
素因数分解したい値をxとして、一の位をaとすると、
(10y+b)2 =  100y2+20by+b2
となるので、mod 10を取ると、
b2-a ≡ c2 (mod 10)
のようになるようなものだけを調べることとなるだろうか。

ただ、難しいので簡単な数で試してダメなら別の方法を考えます。

とりあえず、今日はこんなところで。


ではでは

 

 


Viewing all articles
Browse latest Browse all 5376

Trending Articles