うぃーんビートビートひるどwwwwwwうっくっくwwwwwwえいえいえt(←いずらいt)いえいwwwwらて。
はじめに
多倍長とUTF-8(というかASCII以外)を扱えるようになるために書きます。
クラスとかは触れないので別の記事を読んでください。
Python2系はもう死んだはずなのでここから先Pythonと書いたら3系のことを指します
本質:
docs.python.org
本当にPython3いる?
__int128_t に収まったりしない?
boost が使えるならboost::multiprecision::cpp_int でよくない?
(boostの多倍長は遅いのでPythonを使うべきということはある)
コピペありなら僕のライブラリ使えばよくない?(サンキューうっし)
github.com
変数
型は動的に決まる 明示的にキャストできる
x = 1 x = "a" x = int("1333")
とか書ける きもい スコープはよくわからん ググって
速度
10^5くらいなら普通に回る PyPyならもうちょいいける
計算量に余裕がありそうなときだけ使うと精神衛生にいい
四則演算
+-*は一緒 デフォルトで多倍長なのでオーバーフローはあんま気にしなくていい
x / yは小数型にキャストされるので、C++っぽく切り捨てたいときは x // y とかく
ただし、C++とは違って常にfloorされる つまり -1 // 2 は -1 になる
あまりはx % y と書く C++とは違って、xが負のときでもx % yは非負になる
インクリメント
"++", "--" はない += 1 / -= 1をつかう
コメント
一行コメントは#
# comment
複数行はシングルクオーテーション3つ
''' comment '''
入力
input()
で文字列として一行読んでくる
文字列sに対して
s.split()
で空白で区切った文字列のリストが帰ってくる
リストlに対して
map(int, l)
でlの各要素に対してintでキャストする(mapは高階関数)
組み合わせると
map(int, input().split())
となる
v = int(input()) a, b = map(int, input().split()) x = list(map(int, input().split()))
みたいに使う
出力
print()関数を使う
print("Hello World!")
自動で改行がはいるので、入れたくないときはendに空文字列を指定する
print("Hello World!", end='')
変数を出力するのは
print(a, b) print('{} {}'.format(a, b))
とかでできる 詳しいフォーマット指定はググって
配列
list 使えばよさそう
a[i] で aのi番目の要素にアクセスできる(0-indexed)
C++使いなら負のindexとか普段使わないでしょ 使いたいならググって
ソート
list.sort() これは破壊的
元を壊したくないなら sorted(list)
dictとかsetとか
ググって
range
range(X)と書くと[0,X)の要素からなるリストができるので回数指定のループができる
for i in range(10): statement
配列を一回ずつ見たければinの後に指定する 例えば総和なら
sum = 0 for i in arr: sum = sum + i
条件式
!, &&, || の代わりにnot, and, orをつかう
ネスト
{}の代わりにインデントで表現する 普通はスペース2個か4個
for i in range(10): for j in range(100): ukunichia() tapuchan() lattekun()
上の例だとukunichia()は1000回、tapuchan()は10回、lattekun()は1回呼ばれる
内包表記
C++に対応する機能がないから気にするな
関数
defキーワードを使う 再帰もできる 例えばGCDなら
def gcd(x, y): if x < y: t = x x = y y = x if y == 0: return x return gcd(y, x%y)
飽きた
🍊