Githubリポジトリの作り方
リポジトリのNEWボタンを押す。
リポジトリの名前を登録する
リポジトリを作ったらgit cloneしてきて編集を行いコミットする。
$ mkdir folda $ cd folda $ touch README.md $ echo "#test" >> README.md $ touch sample.py
$ git init $ git add . $ git commit -m "first commit" $ git branch -M main $ git remote add origin https://github.com/englishta/Algo.git $ git push -u origin main
基本情報技術者試験
基本情報技術者試験を受けてきました。就職活動でIT系の企業を受ける際に役立ちそうなので受けてみました。なお、私自身は機械工学を大学で学んでおり、情報系の知識が皆無の状態で勉強を始めました。ただし、C言語は大学で履修していました。
試験の結果
結果は午前試験76%, 午後試験77%でした。午前午後試験のどちらとも60点以上をとることが合格基準なので、受かったと思います。
午前試験の得点率です。
午後試験の得点率です。
午前試験に向けて勉強したこと
合計で100時間ほど午前試験の対策にあてました。午前試験対策として参考書を2週して、過去問道場の問題を500問くらい解きました。午前試験は、過去の問題と全く同じ問題や類題が出題される確率が高い試験なので過去問演習を中心に対策をしました。基本的な知識はYoutubeや参考書で身に着けて、後は過去問をひたすら解きました。
books.rakuten.co.jp
www.fe-siken.com
午後試験に向けて勉強したこと
主に過去問道場の問題を解いて問題の傾向や前提知識を補いました。ソフトウェア、ハードウェアの大問で過去問と全く同じ問題が出題されました。C言語でも過去に似たような問題が出題されていたため、本番でスムーズに問題を解くことが出来ました。「RSA暗号」 SECCON Beginners CTF 2018 RSA is power
import Crypto.PublicKey.RSA as RSA # 与えられたもの N = 97139961312384239075080721131188244842051515305572003521287545456189235939577 E = 65537 C = 77361455127455996572404451221401510145575776233122006907198858022042920987316 # ./mesieve を使ってN=p*qのp,qを求める p = 299681192390656691733849646142066664329 q = 324144336644773773047359441106332937713 l = (p-1)*(q-1) # dを求めるときは、どっちでもok d = RSA.inverse(E, (p-1)*(q-1)) d = pow(E, -1, l) m = pow(C, d, N) print(RSA.long_to_bytes(m))
b'ctf4b{5imple_rs4_1s_3asy_f0r_u}'
が与えられる。そこから秘密鍵dを求めて、平文mを復号する。
nを素因数分解してとなる素数を求める。nが大きすぎるため、Linux上でmsieveを利用して素因数分解を行うか、factordb.comを使って行う。msieveについてはは以下の記事を参照してください。
Pythonのライブラリを使うためにpycryptoをインストール
$ pip install pycrypto
素因数分解パッケージ msieveインストール方法(wsl Ubuntu版)と使い方
素因数分解パッケージmsieveのインストール方法を紹介します。
以下のコマンドを実行します。
$ sudo apt-get install build-essential libgmp3-dev zlib1g-dev libecm-dev
次に以下のコマンドを実行します。少し時間がかかります。
$ wget "http://downloads.sourceforge.net/project/msieve/msieve/Msieve%20v1.52/msieve152.tar.gz?r=&ts=1452107977&use_mirror=jaist" -O msieve152.tar.gz $ tar xvf msieve152.tar.gz $ cd msieve-1.52/ $ make all ECM=1
これで使えるようになりました。
./msieve -q -v -e 22222
22222を素因数分解してみます。
Msieve v. 1.52 (SVN unknown) Tue Mar 23 20:19:05 2021 random seeds: 18e2b498 6e696c40 factoring 22222 (5 digits) p1 factor: 2 p2 factor: 41 p3 factor: 271 elapsed time 00:00:00
だと分かります
【Python】numpyを競技プログラミングでつかう!!
ABC188 B問題
atcoder.jp
import numpy as np n = input() a = np.array(input().split(), dtype=int) b = np.array(input().split(), dtype=int) print('Yes' if np.dot(a, b)==0 else 'No')
Python こんなことができるのか!!メモ
配列の値を変数入力移す
A = [1, 2, 3, 4] a, b, c, d = A print(a, b, c, d)
1 2 3 4
Python コード短縮!!(他人のコードを観察したメモ)ABC187より
'12345'などの数字からなる文字列があったときに、各桁の数を整数型(int型)の配列へと変換
s = input() A = [] for e in s: A.append(int(e))
上の書き方よりも
s = input() A = [int(i) for i in s]
ABC187 A問題の解答
A - Large Digits
a, b = input().split() sa = sum([int(i) for i in a]) sb = sum([int(i) for i in b]) print(max(sa, sb))