I have returned!
nc 202.112.51.234 10001
Note: The attachment has been updated. No logical changes.
Attachment: math_problem2.zip
这次的 math_problem2.py
和上次的略有不同:
import signal
def check(N):
a = int(raw_input('a: '))
b = int(raw_input('b: '))
c = int(raw_input('c: '))
if a <= 0 or b <= 0 or c <= 0:
exit()
t1 = a * (a + b) * (a + c) + b * (b + a) * (b + c) + c * (c + a) * (c + b)
t2 = (a + b) * (a + c) * (b + c) * N
if t1 == t2:
return True
else:
return False
def handler(signum, frame):
print('You are so slllllllllllllllllow!')
exit(0)
def main():
for N in range(4, 18, 2):
if N == 8:
continue
if check(N):
print('pass level {}'.format(N))
else:
print('wrong!')
return
print('You are so faaaaaaaaaaaaaaaaaaaaast!')
print(flag)
if __name__ == "__main__":
signal.signal(signal.SIGALRM, handler)
signal.alarm(20)
main()
这次做了检查,并且添加了一点难度。看下论文,然后用 sage 实现了一下找正整数解的方法(cubic.sage):
import sys
n = Integer(sys.argv[1])
x, y = polygens(QQ, 'x,y')
E = EllipticCurve(-y**2+x^3+(4*n^2+12*n-3)*x^2+32*(n+3)*x)
P = E.gens()[0];
for i in range(0, 1000):
pp = P * i
x = pp[0]
y = pp[1]
a = 8*(n+3)-x+y
b = 8*(n+3)-x-y
c = 2*(-4*(n+3)-(n+2)*x)
if a > 0 and b > 0 and c > 0:
aa = a*a.denom()*b.denom()*c.denom()
bb = b*a.denom()*b.denom()*c.denom()
cc = c*a.denom()*b.denom()*c.denom()
assert(aa/(bb+cc)+bb/(cc+aa)+cc/(aa+bb)==n)
print aa
print bb
print cc
break
然后把各个解导入到一个文件中,由于文件过大,就不在此列出了。最后可以得到结果 THUCTF{3evenge_ECC_1s_1nt3r3string!?}
。