メモ@inudaisho

君見ずや出版 / 興味次第の調べ物置き場

Dasung の 7.8インチ 電子ペーパー端末 続報

 Papelikeシリーズで有名な Dasung (北京 大上科技) が9月頭に情報を出した7.8インチ電子ペーパー端末だが、微博(weibo)上で画像を公開してから、何度か関連情報を出していたのだが筐体の型の画像を出したり、「四大革命性新功能」とか言うだけで具体的な中身の発表はなかったのだが、 indie gogo で新端末の情報を公開していた。

(20181027追記 indie gogo で先行予約受付中 200名まで369ドル、その後の500名は389ドル、さらにその後の1000名は439ドル、2019年3月発送予定、正式予定価格は499ドル)

www.indiegogo.com

 Good eReader でも情報でてたのでリンクはっとく

goodereader.com

 それから9月の新情報として触れていた過去記事がこれ。

inudaisho.hatenablog.com

f:id:inudaisho:20180927110449p:plain
5 Amazing Functions

 海外には " Not eReader " という名前で売り出すらしい。単なる電子書籍リーダーではないとして売り出すんだろう。五大機能として

  • Pad
  • eReader
  • Video Player
  • PCMonitor
  • Mobile phone monitor

 とある。これだと予定されている Boox Nova (Onyx 広州 文石科技)やもう売り出しにかかっている Likebook Mars(Boyue 深圳 博閲科技)/Illumina XL6 (オランダ icarus)以上の機能があるということだな。電話できるなら対応周波数帯が気になる。 Mobile phone monitor というのはスマホに無線で接続してスマホのモニターとしてつかえるということのようだ。Good eReader によるとHDMIポートがついているということらしい。スペック的には

  • 7.8インチ 300ppi 電子ペーパー
  • 冷色暖色のフロントライト
  • 5300mA バッテリー
  • Quad core Processer
  • 2GB+64GB
  • Android6.0

 と基本的なところは押さえているしバッテリーが多いのがすごい。微博の方で「なんか筐体が厚い」という指摘をうけたのに「バッテリーいっぱい積んだから」と答えていたのでほとんどバッテリーなんだろう。となると当然重くなりそうだがそのへんどうなんだろう。ちなみにペン入力については入れない方針が決まってるようだ。

Dasung E-Ink Paperlike Pro 13.3 Monitor [並行輸入品]

Dasung E-Ink Paperlike Pro 13.3 Monitor [並行輸入品]

AtCoder ABC110 D 素数生成42424626

ABC110 のテストケース

 AtCoder の先週の ABC110 はテストケースが甘い件の悪い面が出たようで、B はテストケースが条件に合っておらず、C は文字数を数えただけの嘘解法がACしていたせいか、レーティングの対象にならなかった。よしよし。30分寝すごして C を ACしそこねた黒歴史を葬り去ることができるぞ。いいぞ。

 ABC のテストケースが甘いのは AtCoder が数学寄りで、難しい問題を作るのに頭をヒネっているので、ABC程度の簡単な問題に手間をかけていないからだろう。人のことはいえないので、これくらいにして D だ。

ABC110 D

 D は素因数分解する部分と場合の数を数え上げる部分の二つからなる。素因数分解するところまでは自力でできたが、そこからどう約数の組合わせを数えあげていけばいいのか全然思いつかず、解法をみてしまった。約数を構成する各素数毎に個数を数えあげ、それぞれで重複組み合わせを計算してかければよいと。重複組み合わせは普通の組み合わせが中身の組み合わせであるのに対し、中身の分け方の組み合わせなので、中に仕切りをいれてその仕切りの組み合わせを数えるというのでよく、普通の組み合わせの応用でできる。なるほど。なるほど。さて、そこからが問題で、ABC各問題にくらべてDはちゃんとテストケースがエグいところを突いていたのでいつまでたってもACできなかった。

ABC110 D 重複組み合わせ

 先に重複組み合わせの方のことを書いておくと、こないだやった ABC042 D の応用でついつい階乗の配列を作り階乗の逆元の配列をつくるなどという面倒なことをしていたが、ABC042 D ほど組み合わせを数えまくるわけではないので普通に逆元出してもいいようだ。というか、逆元出さずに計算の省略もせずに組み合わせの公式そのまま計算しても間に合うようだった。ところで累乗出すのに二分累乗法を自分で組まなくても python3 だと pow で剰余の処理までしてくれるのに気付かなかった。まぁいいか。

 初等整数論について、(一般人でも金出したら使える)立命館の図書館に行って開架に並んでいる初等整数論の本を読んできたが以下の本が非常にわかりやすかった。

初等整数論 (日評数学選書)

初等整数論 (日評数学選書)

 逆元というのは群論の中で出てくる概念のようだ。数学に出てくるいろんな構造を演算の方法で分類するというもので、前に書いた記事で逆元は行列の逆行列みたいなものかと書いたが、逆にそういう考え方をするのが群論ということで、ある演算体系において結合と定義する演算があり(いわゆるかけ算に相当)、何に「結合」しても自分になるのが単位元(整数でいうところの1)、単位元以外のあるものに単位元以外のものを「結合」して単位元になるものが逆元ということのようだ。つまり行列の逆元が逆行列であるということのようだ。剰余の概念自体は昔からあるものだが、ガウス合同式をひねり出したおかげで剰余世界の考察がしやすくなったように、そういう見方を導入したおかげで数学のある分野の知識が他の分野へ応用しやすくなったりしてるんだろうな。よく知らんが。剰余の逆元でググるといろんな人がいろんな説明をしているが、そのなかに結構誤解のようなものも含まれている。外形的なアプローチ(群論)でみる逆元と内部的なアプローチ(整数論)でみる逆元のどちらで覚えたかで説明のしかたが異なるからだろう。使えればどうでもいい。逆元の出し方にも工夫があるようだがちょっとそこまで手が及んでないので次の課題とする。

ABC110 D 素数生成42424626

 で、最初にもどって素数の出しかただが、Python3 勢では自分とおなじように2からはじめて1足していく方法でループを回しているのがほとんどだったが、中におもしろい出し方をしてる人がいた。yutote さんのこれ。

提出 #3259690 - AtCoder Beginner Contest 110

increments = itertools.chain([1,2,2],itertools.cycle([4,2,4,2,4,6,2,6]))

 1足していかずにこのように間隔で足してゆくのだが、最初見たときはある数字以下では素数を出せる式があるのだろうか、と考えてしまった。42424626でググるとなにか素数の本でも出てくる数列のようだ。この数字の性質をみるために実際に足していって出てくる数字がそれまで出てきた素数で割り切れるのかどうか試してみた。

import itertools
f = 2
p = []
increments = itertools.chain([1,2,2],itertools.cycle([4,2,4,2,4,6,2,6]))
for incr in increments:
    if  f > 121 + 20:
        break
    isPrime = True
    alist = []
    for ip in p:
        if f % ip == 0:
            isPrime = False
            alist.append(ip)
    if isPrime:
        print(f,"o",incr)
        p.append(f)
    else:
        print(f,"x",incr,','.join([str(x) for x in alist]))
    f += incr
print(','.join([str(x) for x in p]))

 こんな感じのものを書いてみるとこうなる。(変数の命名規則が違うのはもとのをそのまま使ってるのが多いから)

 出てくる数 | それまで出てきた素数で割れないか | 次足す数 | 割れるとき、割った素数

2 o 1  
3 o 2
5 o 2
7 o 4
11 o 2
13 o 4
17 o 2
19 o 4
23 o 6
29 o 2
31 o 6
37 o 4
41 o 2
43 o 4
47 o 2
49 x 4 7
53 o 6
59 o 2
61 o 6
67 o 4
71 o 2
73 o 4
77 x 2 7,11
79 o 4
83 o 6
89 o 2
91 x 6 7,13
97 o 4
101 o 2
103 o 4
107 o 2
109 o 4
113 o 6
119 x 2 7,17
121 x 6 11
127 o 4
131 o 2
133 x 4 7,19
137 o 2
139 o 4
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139

 ほぉ... つまり 42424626 は 2,3,5 の倍数の隙間にみられる規則ですな。簡易なエラトステネスの篩というところか。実はググると出てくる英語の素数の本に 42424626 は3回くりかえすまで規則が破られないとか出てくるので、11の二乗くらいから破れるんだろうとおもって上限を121+20に設定したものの、意外にも 7x7 の49で破られていた。英語の素数の本もあてにならんな。しかしこれ素数がたくさん必要なときに便利かもしれない。

 ところで昔の初等整数論の本読んでると 4n+1に素数が濃厚とか4n-1に濃厚だとかいう話題が出てくるが、これも単にエラトステネスの篩の言い換えなんじゃないかという気がしてきた。

数学入門〈上〉 (岩波新書)

数学入門〈上〉 (岩波新書)

現代数学入門 (ちくま学芸文庫)

現代数学入門 (ちくま学芸文庫)

AtCoder ABC110 結果

 ちょっと山奥に帰って屋根の飛んだ土蔵の片付けしてたせいか、飯食ったら寝てしまい30分余り出遅れた。そのうえCにもたもたしてしまい、とりあえず正しく判別できるものを時間ギリギリに出したものの、途中経過の出力を削り忘れてしまい、waのまま。ということでABしか取れず。つらい

 手が遅いのはしかたないとしてABCの三問は30分くらいで片づけたいところ。結局今回ABに20分弱かけてCの最初の解法思いついて提出するまで30分かかりとりあえずACできる解答ひねりだすのに20分もかかっている。これではいかんなというのが反省の弁。しかも今回のDは例の剰余世界の問題だからボーナスステージみたいなもんだ。今回Bで出題の不手際があったのでレーティングの対象にするか否か審議中らしいが、レーティングから外してくれるならありがたいところだ。さてこれからDでもやろう。

 → 全然できない。つらい。

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

アリハンドブック 増補改訂版

アリハンドブック 増補改訂版

AtCoder ABC042 D 初等整数論 素数1000000007と合同と逆元

 AtCoder の解説をみたときに 1(mod Y) とかいうよくわからない記法があってスルーしていたが、あれが何なのかやっとわかった。初等整数論の初歩で使う記号だった。D - いろはちゃんとマス目 / Iroha and a Grid は組み合わせを使って解くのだが、都度nCrの階乗を計算させたりするとTLEになってできない。解説をみると逆元とかいうのとともにその(mod m)みたいなのがでてくる。これで計算が非常に圧縮できるらしいのだが、よく知らずに次に進むのも癪なのでググりまくった。初等整数論は初等とつくだけあって簡単なもので高校生でもなんとかわかりそうなものだが高校数学の範囲内ではそんなに詳しくやらないので、自分のように素数とか最大公約数とかは数字のパズル程度のものかと思って以後数学に触れてない人間も多いだろう。もっともコンピュータの基本だったり暗号の基本でもあるのだが、暗号のことがよくわかってなかったのは結局このへんがよくわかってなかったからかもしれない。

 ネット上にある説明はもうわかってる人が基本の説明をおざなりにして書いてるのが多く、そもそもの基本がよくわかってない自分にとってはあんまり意味のないのが多い中で、ここはその歴史から丁寧に説明がしてあってわかりやすかった。

プログラミングの背景:数論

プログラムの背景 (旧ホームページ)

 詳しい説明は上でも見てもらって、ここからは自分がわかった範囲のことを忘れたときのために適当にまとめておく。

 剰余というのは自分程度の人間でも知ってるもので、割った余りのことだが、それをガウス(19世紀初)が合同式というものをひねりだして扱いやすくしたのがこの分野の発展の基礎らしい。

 142536796 - 4 = 6n 

 これを ≡ を合同記号として、

142536796 ≡ 4 (mod 6) 

 のように表現するのだが、そうすると 142536796 は 6 で割った世界では4ということになる。4 ( mod 6 ) は 6 を法として 4 と読むらしいが、それのわかりやすい応用が曜日ということになる。すべての日が月火水木金土日のどれかで表現できる。集合でいうところの写像か。剰余の世界におさめるということはつまり情報の圧縮になるので、対数などとおなじように巨大な数字を扱いやすくする技術の一つというわけだ。

 ガウスのひねりだした合同式が重要なのはこの ≡ が = と似た性質をもっているから応用しやすいということだ。つまり両辺に演算しても変わらないのでその剰余世界であるかぎり、どこでも応用できる。ということだが問題はうかつに割り算できないことで、割り算に相当するものとして逆元が使われることになった。逆元はかけると剰余が1になる数のことで一意に決まり、拡張ユークリッド互除法などで導ける。ABC042 D の解法では フェルマーの小定理の両辺に逆元をかけて導いている。素数1000000007などを使うのは 231が2147483648だからちょっと前のコンピュータだと都合がいいというところか。x の逆元を x-1とも表記し、現実にフェルマーの小定理 Xp-1= 1 (mod p) の両辺に x -1をかけるという操作をして逆元を出すという演算もできている。というか逆行列っぽいな。

 40代にもなってこんな基本をやるのは何だがまぁやって損はあるまい。

 ↓こっちには更に初等整数論の本を読んで得たことも書きくわえた

inudaisho.hatenablog.com

Disquisitiones Arithmeticae...

Disquisitiones Arithmeticae...

ガウス 整数論 (数学史叢書)

ガウス 整数論 (数学史叢書)

AtCoder ABCとARCの重複

 さてAtCoder のABCの過去問をやろうとしたが、ABを今からやるのは40代のおっさんにとっては時間の無駄でCDを潰していきたい。ということだが、どうもABCの初期は手探り状態だったようでまだレベル感が固まっていないらしい。そこが固まったのがABC042からということでじゃぁそこからやろうかなとおもったが、ARCと重複している。重複してるならARCをやった方がよいのでは?と40代のおっさんらしい事を考えてみたがABC042以降でもABC独自の出題がある。重複してるかしてないかはABC042以降はURLでわかるようになっている。で、ABC042以降についてAtCoder Problemsのデータを抽出して問題の重複を示してみた。赤いのが重複してるところだ。

 結論だけ先に書いておくと、051,054,057,061,064,070,073,075,076,079,080,084,085,088,089,096,099,100,103,104,105,106,109がABC042~ABC109でABC独自の出題となる。

開催 A B C D
ABC109 abc109_a abc109_b abc109_c abc109_d
ABC108 abc108_a abc108_b arc102_a arc102_b
ABC107 abc107_a abc107_b arc101_a arc101_b
ABC106 abc106_a abc106_b abc106_c abc106_d
ABC105 abc105_a abc105_b abc105_c abc105_d
ABC104 abc104_a abc104_b abc104_c abc104_d
ABC103 abc103_a abc103_b abc103_c abc103_d
ABC102 abc102_a abc102_b arc100_a arc100_b
ABC101 abc101_a abc101_b arc099_a arc099_b
ABC100 abc100_a abc100_b abc100_c abc100_d
ABC099 abc099_a abc099_b abc099_c abc099_d
ABC098 abc098_a abc098_b arc098_a arc098_b
ABC097 abc097_a abc097_b arc097_a arc097_b
ABC096 abc096_a abc096_b abc096_c abc096_d
ABC095 abc095_a abc095_b arc096_a arc096_b
ABC094 abc094_a abc094_b arc095_a arc095_b
ABC093 abc093_a abc093_b arc094_a arc094_b
ABC092 abc092_a abc092_b arc093_a arc093_b
ABC091 abc091_a abc091_b arc092_a arc092_b
ABC090 abc090_a abc090_b arc091_a arc091_b
ABC089 abc089_a abc089_b abc089_c abc089_d
ABC088 abc088_a abc088_b abc088_c abc088_d
ABC087 abc087_a abc087_b arc090_a arc090_b
ABC086 abc086_a abc086_b arc089_a arc089_b
ABC085 abc085_a abc085_b abc085_c abc085_d
ABC084 abc084_a abc084_b abc084_c abc084_d
ABC083 abc083_a abc083_b arc088_a arc088_b
ABC082 abc082_a abc082_b arc087_a arc087_b
ABC081 abc081_a abc081_b arc086_a arc086_b
ABC080 abc080_a abc080_b abc080_c abc080_d
ABC079 abc079_a abc079_b abc079_c abc079_d
ABC078 abc078_a abc078_b arc085_a arc085_b
ABC077 abc077_a abc077_b arc084_a arc084_b
ABC076 abc076_a abc076_b abc076_c abc076_d
ABC075 abc075_a abc075_b abc075_c abc075_d
ABC074 abc074_a abc074_b arc083_a arc083_b
ABC073 abc073_a abc073_b abc073_c abc073_d
ABC072 abc072_a abc072_b arc082_a arc082_b
ABC071 abc071_a abc071_b arc081_a arc081_b
ABC070 abc070_a abc070_b abc070_c abc070_d
ABC069 abc069_a abc069_b arc080_a arc080_b
ABC068 abc068_a abc068_b arc079_a arc079_b
ABC067 abc067_a abc067_b arc078_a arc078_b
ABC066 abc066_a abc066_b arc077_a arc077_b
ABC065 abc065_a abc065_b arc076_a arc076_b
ABC064 abc064_a abc064_b abc064_c abc064_d
ABC063 abc063_a abc063_b arc075_a arc075_b
ABC062 abc062_a abc062_b arc074_a arc074_b
ABC061 abc061_a abc061_b abc061_c abc061_d
ABC060 abc060_a abc060_b arc073_a arc073_b
ABC059 abc059_a abc059_b arc072_a arc072_b
ABC058 abc058_a abc058_b arc071_a arc071_b
ABC057 abc057_a abc057_b abc057_c abc057_d
ABC056 abc056_a abc056_b arc070_a arc070_b
ABC055 abc055_a abc055_b arc069_a arc069_b
ABC054 abc054_a abc054_b abc054_c abc054_d
ABC053 abc053_a abc053_b arc068_a arc068_b
ABC052 abc052_a abc052_b arc067_a arc067_b
ABC051 abc051_a abc051_b abc051_c abc051_d
ABC050 abc050_a abc050_b arc066_a arc066_b
ABC049 abc049_a abc049_b arc065_a arc065_b
ABC048 abc048_a abc048_b arc064_a arc064_b
ABC047 abc047_a abc047_b arc063_a arc063_b
ABC046 abc046_a abc046_b arc062_a arc062_b
ABC045 abc045_a abc045_b arc061_a arc061_b
ABC044 abc044_a abc044_b arc060_a arc060_b
ABC043 abc043_a abc043_b arc059_a arc059_b
ABC042 abc042_a abc042_b arc058_a arc058_b

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?