print(tan(int.from_bytes(open("flag.txt", "rb").read().strip(), "big")).n(1024)) # -0.7578486465144361653056740883647981074157721568235263947812770328593706155446273431983003083023944193451634501133844062222318380912228469321984711771640337084400211818130699382144693337133198331117688092846455855532799303682791981067718891947573941091671581719597626862194794682042719495503282817868258547714
が与えられている。
の周期がなので、
外して
不明な値は で係数。これをLLL とかで求めたら良い
で 。このままだと1列目(一番左の列)だけが小さいので、ここをでスケーリングして大体全ての列が or くらいの大きさになるようにする
なんか微妙に誤差があるけど解ける
C = -0.7578486465144361653056740883647981074157721568235263947812770328593706155446273431983003083023944193451634501133844062222318380912228469321984711771640337084400211818130699382144693337133198331117688092846455855532799303682791981067718891947573941091671581719597626862194794682042719495503282817868258547714 C = arctan(C) P = pi.n(1024) K = 2**1024 # v = [M', k, 1] M = matrix(QQ, [ [1*K, 0, 1], [C*K, 1, P], [P*K, 0, 0], ]) L = M.LLL() m = int(abs(L[0][-1])) print(bytes.fromhex(hex(m)[2:]))
めちゃ久しぶりに純LLLさわった。Inequality ... は整数しか扱えないので
https://github.com/maple3142/My-CTF-Challenges/tree/master/ImaginaryCTF%202023/Tan