このブログを検索

2023/05/23

raspbery pi を wifiルータにする

sudo su

#ip forwarding
/etc/systemctl.conf
net.ipv4.ip_forward=1

#iptables設定消去
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

#nat設定
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE


iptables-save > /etc/iptables.ipv4.nat

iptables-restore < /etc/iptables.ipv4.nat

#再起動しても有効にする
/etc/rc.local
# exit 0 の上に
sudo iptables-restore < /etc/iptables.ipv4.nat
#おまけ static route
# route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168
.1.76 eth0
# ip r
default via 172.16.11.254 dev wlan0 proto dhcp src 172.16.11.112 metric 303
10.0.0.0/24 via 192.168.1.76 dev eth0
172.16.11.0/24 dev wlan0 proto dhcp scope link src 172.16.11.112 metric 303
192.168.1.0/24 dev eth0 proto dhcp scope link src 192.168.1.254 metric 202

参考
Raspberry pi を NAT ルーター兼 DHCP + DNS サーバーにしたい - 子育てしながらエンジニアしたい

2023/05/15

約分その2

さっきの約分の問題はyoutubeで見かけたものなのだが、その動画では私がやったようなやり方で解くのではなかった。

3007/1067 であれば、2つの数の差を求める。

1940。

この数を素因数分解する。

2で割れる。970。また2で割れる。485。

4で割れるのか。485。

5で割れる。97。

1940=4x5x97


3007も、1067も、97で割れる。

つまり、公約数である。


2つの数の差の約数がなぜ元の数の約数になるのか。

直感的にはピンとこない。


約分、素因数分解、素数判定

約分、素因数分解、素数判定

この3つは実質同じことをする。

ある数について、約数があるかどうかを確かめる。


たとえば、「3007/1067 という分数を約分しなさい」という問題。

パっとみ、割れる数が思いつかない。2, 3, 5あたりはダメ。


すぐにできる約数を見つける方法は、

末尾が偶数... 2

各桁の数を足すと3の倍数... 3

末尾が5か0... 5


そして、2桁だったら素数は列挙してもそんなに時間はかからない。

2, 3, 5, 7, 11, 13, 17, 19, 23, 

くらいまではすぐ出る。


29, 31, 37, 41, 43, 47, 53, 

この辺から怪しくなってくるか


でも2桁だったら、「素数を列挙してその中にあるか」ではなく、

いくつかの数で割ってみればわかる。1分もかからないだろう。


また、桁数は10桁とか20桁とか、「どんな桁数であっても使える素数判定法」を見つけようというのでもない。


まあ、4、5桁くらい。


先ほど例にあげた、3007, 1067 といったような数字で使える、そんなに厳密でなくてもいい方法。


この例では、2つの数字がともに末尾が7となっている。

もしこれらの数字に約数があるならば、2つの数値をかけて結果の末尾(1の位)が7になる数字、ということである。


それはどういう数かと考えて、まず思ったのは、「末尾が7である数と、末尾が1である数の積」である。そして、これだけだと思った。

しかし、それだけではなく、3x9=27 でもある。


ただ、これだけわかればだいぶ楽だ。

3007について。

2, 3, 5 では割れないことはわかっている。

7は、微妙だが割ってみればすぐわかる。割れない。

8, 9, 10 はそれぞれその約数で割れないのですでに対象外。

2桁になっていく。


4桁の数で、「約分しなさい」という問題だから、おそらく2桁x2桁になるのだろう。

候補は下1桁が1, 3, 7, 9

これくらいなら順番に割ってもよさそうだが、

目的はこの問題を解くことではなく簡易的でもいいから判定法を見つけることなので、

もう少し考える。


3007という数の大きさ。


3000は、10x300, 15x200, 30x100 などである。(ほかにもあるが、たとえば。)

ここに登場する、10, 15, 30, 100, 200, 300 などをいじって、

先ほど候補として絞った「下一桁が1と7、あるいは3と9」にしたらどうだろうか?

10x300→ 11x299, 13x299, 17x291

15x200→13x209, 17x191, 19x193

30x100→31x97, 33x99, 29x93


適当にやっただけなので、ざっと見ると

13x209, 29x93は3000に満たないので除外


11x299, 13x299, 17x291

17x191, 19x193

31x97, 33x99


13x299は明らかに大きい

19x193も大きい

33x99も大きい


11x299, 17x291

17x191, 31x97,


おっと、末尾が7にならないのが混じっていた。

17x291, 17x191, 31x97,


17x291=17x(300-9)=5100-153

17x191=17x(200-9)=3400-153

31x97=31x(100-3)=3100-93=3007 ... これ!



1067は...

同様にやってもいいのだが

すでに3007=31x97が判明しているので

どっちかで割れるであろう。


31x37かな

(30+1)x37 ... 違う

31x27=(30+1)x27=810+27... 違う


97x11は...

(100-3)x11=1100-33=1067... これ!


ちなみに1067の方を先にやった場合の候補は


1067だと、1000との差がやや大きい。

1000=10x100, 20x50, 500x2, 330x3+α, 250x4


で、末尾が7になるから

11x97, 21x47, 

500x2, 330x3, 250x4は除外


もう答えを知ってるから 11x97がすぐ出てきちゃったけど...