解決問題「コラッツ・角谷予想」(後半)

空間情報連載
Pythonで数学を学ぼう!

桜井進のPython+Math教室 第9回

Pythonで数論!未解決問題「コラッツ・角谷予想」(後半)
1.コラッツ予想

2.コラッツ・シークエンスのステップ数
コラッツ・シークエンスのステップ数を求めるコード

# colg.py
# ステップ数(最大ステップ数)と頻度のグラフ描画
import numpy as np                  # 配列を扱う数値計算ライブラリNumPy
import matplotlib.pyplot as plt     # グラフ描画ライブラリmatplotlib
import japanize_matplotlib          # matplotlibの日本語化
import datetime as dt
from decimal import Decimal

while(1):
  Model = input('1.a≦n≦bに対するコラッツ・シークエンスのステップ数の最大値とnを算出\r\n'
                '2.a≦n≦bに対する横軸ステップ数、縦軸頻度の棒グラフ描画\r\n'
                '1、2のどれかを入力 ')
  if Model.isdecimal():
    Model = int(Model)
    if 1 <= Model <= 2:
      break

winzipインストール

Macを使っていて面倒なのが
WindowsユーザーにZipファイルを送ることです

ZIPANG.appがおすすめ
https://apps.apple.com/jp/app/zipang/id882655968?mt=12
私はこのアプリをツールバーに登録して使っています
フォルダをZipする際にアクセスが楽です
スクリーンショット 100

ZIPANG.appは暗号化もたやすくできるので完璧

そこで、暇つぶしがしたくなります
ターミナルで同じことができないのか?

 

windowsで文字化けしないzipを, macで作成

 

 

System Integrity Protection (SIP) を無効disableにする
csrutil disable
System Integrity Protection status : disabled

PHP7.4インストール

.zshrc

export PATH="/usr/local/opt/php@7.4/bin:PATH"
export PATH="/usr/local/opt/php@7.4/sbin:PATH"
export LDFLAGS="-L/usr/local/opt/php@7.4/lib"
export CPPFLAGS="-I/usr/local/opt/php@7.4/include"

.zprofile

alias brew="PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin brew"

curl -s -O https://pear.php.net/install-pear-nozlib.phar
とすると
warning: pear/pear dependency package “pear/Archive_Tar” downloaded version 1.4.9 is not the recommended version 1.4.4
エラー

php@7.4削除
brew uninstall php@7.4
rm -rf /usr/local/etc/php

=PEAR自身をアップグレード=
URL
https://aknot.hatenablog.jp/entry/20090716/1247726269

pear upgrade –force Archive_Tar
pear upgrade pear
pear version
PEAR Version: 1.10.12
PHP Version: 7.3.28
Zend Engine Version: 3.3.28

Running on: Darwin MacBook-Pro.local 19.6.0 Darwin Kernel Version 19.6.0: Mon Apr 12 20:57:45 PDT 2021; root:xnu-6153.141.28.1~1/RELEASE_X86_64 x86_64

history

  978  2021-05-09 14:47  brew install php@7.4
  979  2021-05-09 14:50  brew info php@7.4
  980  2021-05-09 15:53  brew info httpd
  981  2021-05-09 17:43  source .zprofile
  982  2021-05-09 17:43  source .zshrc
  983  2021-05-09 17:43  cd /tmp
  984  2021-05-09 18:01  curl -s -O https://pear.php.net/install-pear-nozlib.phar
  985  2021-05-09 18:01  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin 
  986  2021-05-09 18:04  pear upgrade --force Archive_Tar
  987  2021-05-09 18:04  pear upgrade pear
  988  2021-05-09 18:05  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
  989  2021-05-09 18:05  pear version
  990  2021-05-09 18:41  pecl download https://pecl.php.net/get/zip
  991  2021-05-09 18:41  cd /tmp
  992  2021-05-09 18:42  l
  993  2021-05-09 18:42  curl -s -O https://pear.php.net/install-pear-nozlib.phar
  994  2021-05-09 18:42  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
  995  2021-05-09 18:43  pecl download https://pecl.php.net/get/zip
  996  2021-05-09 18:43  brew doctor
  997  2021-05-09 18:43  cd ~
  998  2021-05-09 18:44  brew uninstall php@7.4
  999  2021-05-09 18:44  rm -rf /usr/local/etc/php
 1000  2021-05-09 18:44  brew install php@7.3
 1001  2021-05-09 18:47  cd /tmp
 1002  2021-05-09 18:47  curl -s -O https://pear.php.net/install-pear-nozlib.phar
 1003  2021-05-09 18:47  sudo php install-pear-nozlib.phar -d /usr/local/lib/php -b /usr/local/bin
 1004  2021-05-09 18:48  pear upgrade --force Archive_Tar==1.4.4
 1005  2021-05-09 18:49  pear upgrade --force Archive_Tar@1.4.4
 1006  2021-05-09 18:49  pear upgrade --force Archive_Tar=1.4.4
 1007  2021-05-09 18:49  pecl download https://pecl.php.net/get/zip
 1008  2021-05-09 18:49  tar -xzvf zip
 1009  2021-05-09 18:50  sudo find /Library -name php.h
 1010  2021-05-09 18:51  cp /usr/bin/phpize /usr/local/bin/phpize
 1011  2021-05-09 18:52  cp /usr/bin/php-config /usr/local/bin/php-config
 1012  2021-05-09 18:53  cd zip-1.19.2
 1013  2021-05-09 18:53  phpize
 1014  2021-05-09 18:53  ./configure -with-php-config=/usr/local/bin/php-config
 1015  2021-05-09 18:54  make
 1016  2021-05-09 18:59  mkdir -p /usr/local/php/extensions
 1017  2021-05-09 18:59  sudo mkdir -p /usr/local/php/extensions
 1018  2021-05-09 18:59  cp modules/zip.so /usr/local/php/extensions/zip.so
 1019  2021-05-09 18:59  sudo cp modules/zip.so /usr/local/php/extensions/zip.so
 1020  2021-05-09 19:00  sudo apachectl restart
 1021  2021-05-09 19:01  cd ~
 1022  2021-05-09 19:01  ./winzip
 1023  2021-05-09 19:02  com
 1024  2021-05-09 19:03  cp winzip /usr/local/bin
 1025  2021-05-09 19:03  winzip
 1026  2021-05-09 19:03  l
 1027  2021-05-09 19:03  winzip history.txt
 1028  2021-05-09 19:04  l

WAVLINK USB3.0 Docking Station+DisplayLink USB

Wavlink USB 3.0ユニバーサル デュアル ディスプレイ ドッキングステーション UG39DK4-BL
USB経由でHDMIモニタ出力を可能にしてくれる

MacBook Airで使っていたがubuntu20.04LTSでも使えないか試してみた
WAVLINKのWEBにはMacOSとWindowsのドライバしかなく、Linux / Unixはサポートされていませんとあった

https://qiita.com/menphim/items/ff0a708a917d2b8256b5
https://www.displaylink.com/downloads/ubuntu
https://support.displaylink.com/knowledgebase/articles/615714#ubuntu
https://www.it-swarm.jp.net/ja/usb/ubuntu%E3%81%A7displaylink-usb%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%BC%E3%82%92%E5%8B%95%E4%BD%9C%E3%81%95%E3%81%9B%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/957257278/
https://github.com/AdnanHodzic/displaylink-debian
を参考に使えるようになった


ubuntu ケンジントンターボマウスのボタン割り当て

ケンジントンターボマウスには4つのボタンがあります。
Macで使用する際には、右上ボタンにMission Control(^↑)を割り当てています
ボタン割り当てはkensington TrackballWorksで簡単に設定することができます

ubuntuではそのようなアプリケーションがありません
ubuntuでも右上ボタンにMission Controlに相当する機能を割り当てたいと思いその方法を探りました

WordPress コードの書き方

本ブログのコードは以下のようにして書いています

■ブロックのカスタムHTMLの書き方

記述のポイント
<div class="hcb_wrap"> プラグイン Highlighting Code Block 使用
<p class="prism-title">prime3time.py</p> 左上にファイル名prime3time.py表示
<pre class="prism line-numbers language-python ">
 prism 独自カラーリングファイル・独自prism.js
 line-numbers 行ナンバー表示
 language-python 右上に言語名python表示

<code>コード</code>

<code>
コード
</code>
とかかないこと

<code>import time
…
 print(f'計算にかかった時間{t}秒')</code></pre>
</div>
のように書き始め、書き終わる
<div class="hcb_wrap">
<p class="prism-title">prime3time.py</p>

<pre class="prism line-numbers language-python "><code>import time
n = int(input('素数判定したい3以上の自然数nを入れてね n='))   # 入力されたnを整数に変換
start = time.time()                       # 時間計測開始
p = 0                                     # 約数の個数カウンター
for k in range(1,n+1):                    # k=1,...,n
	if n % k == 0:                        # n÷kの余りが0ならば
		print(f'{n} は {k} を約数にもつ')   # 約数kを表示
		p = p + 1                         # 約数の個数カウンターpを+1
if p > 2:                                 # 約数の個数が3以上の場合
	print(f'{n} は約数を{p}個もつ合成数で素数ではない')    # 素数ではない
	t = time.time() - start               # 時間計測終了
	print(f'計算にかかった時間{t}秒')
else:                                     # そうでない場合(p=2)
	print(f'{n} は素数!')                 # 素数
	t = time.time() - start
	print(f'計算にかかった時間{t}秒')</code></pre>
</div>

prime3time.py

import time
n = int(input('素数判定したい3以上の自然数nを入れてね n='))   # 入力されたnを整数に変換
start = time.time()
p = 0    # 約数の個数カウンター
for k in range(1,n+1):   # k=1,...,n
	if n % k == 0:       # n÷kの余りが0ならば、(kはnの約数ならば)
		print(f'{n} は {k} を約数にもつ')    # 約数kを表示
		p = p + 1        # 約数の個数カウンターpを+1
if p > 2:                # for文を抜け出した後 約数の個数で条件分岐 2個よりも大きい場合には
	print(f'{n} は約数を{p}個もつ合成数、素数ではない')    # 合成数
	t = time.time() - start
	print(f'計算にかかった時間{t}秒')
else:                    # そうでない場合(p=2)
	print(f'{n} は素数!')         # 素数
	t = time.time() - start
	print(f'計算にかかった時間{t}秒')

プラグイン+追加CSS

p.prism-title {
 background: #333333;
 font-size: 90%;
 display: inline-block;
 color: #ffff00;
 letter-spacing: 0.1em;
 margin: 0px 0px;
 padding: 3px 15px 3px 15px;
 border: 0px solid #f5f2f0;
 border-radius: 1px 5px 0px 0px;
 position: relative;
 top: 2px;
 z-index: 100;
}