青少年CTF-简单的数学题

题目描述:

解题方法:

解析:

这是一个通过网络连接(使用 nc 命令,即 netcat,用于在网络中进行数据传输和连接)到远程服务器(challenge.qsnctf.com 的 30137 端口),然后解决一系列数学方程来获取 flag 的过程。以下是对每一步的详细解释:

1. 连接到服务器:
使用 nc challenge.qsnctf.com 30137 命令建立与服务器的连接。连接成功后,服务器会发送欢迎信息并给出第一个数学方程。

2. 挑战 1:
   服务器给出的方程是 2*15^2-1/x + 15 - 6 = 458.875,要求计算 x 的值。
   首先,对等式左边的式子进行计算:
    2*15^2 + 15 - 6 &= 2*225 + 15 - 6
    = 450 + 15 - 6
    = 459
   此时方程变为 459 - 1/x = 458.875,移项可得 1/x = 459 - 458.875 = 0.125 = 1/8,所以 x = 8。输入 8 后,服务器验证正确并给出下一个挑战。

3. 挑战 2:
   方程是 5 + sqrt(x) = 8,提示 Sqrt 表示根号。
   移项可得 sqrt(x) = 8 - 5 = 3,两边同时平方得到 x = 3^2 = 9。输入 9 后,服务器验证正确并给出下一个挑战。

4. 挑战 3:
   方程是 x^10 + 2^10 - 4*x = 6131066258749。
   先计算 2^10 = 1024,方程变为 x^10 - 4*x + 1024 = 6131066258749。
   这是一个高次方程,通常可以通过试错法或使用一些数值计算工具来求解。在这个例子中,通过尝试不同的数值,发现当 x = 19 时:
19^10 - 4*19 + 1024 &= 6131066258321 - 76 + 1024
= 6131066258321 + 948
= 6131066258749
   输入 19 后,服务器验证正确,并最终给出 flag:flag{51e6407f43bb4398a64c83591ba0ea34}。

综上所述,通过依次正确解答服务器给出的三个数学方程,最终成功获取了 flag。

挑战三这里公式可能计算量较大,所以可以用Python来计算,代码内容:

import sympy as sp

# 定义符号变量
x = sp.Symbol('x')

# 定义方程
equation = sp.Eq(x**10 + 2**10 - 4 * x, 6131066258749)

# 求解方程
solutions = sp.solve(equation, x)

# 遍历解并打印出实数解
for solution in solutions:
    if solution.is_real:
        print(f"实数解 x = {float(solution)}")

得出来的结果有两个,使用第一个就可以了

注意:如果在使用过程中,发现无法运行,是因为少了一个sympy库,以 Windows 为例,激活虚拟环境的命令如下:win+r后,cmd进入命令行,使用命令:D:\01wangan\pythonProject\.venv\Scripts\activate(这里地址每个人不一样,如果报错具体情况看一下上方图片结果显示中下方第一行,就是你的路径地址,前面可能不一样,后面应该一样,注意要添加什么,仔细比对。)

进入到d盘以后,使用 pip 命令来安装 sympy 库命令:pip install sympy

安装成功后的样子。
接着是验证 sympy 库是否成功安装,如果成功安装,会显示 sympy 库的相关信息。使用命令:pip show sympy

之后在重新运行即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值