python来解数学问题

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

最开始的思路:一个整数肯定有范围的吧,那就遍历+规则来找出来;

num_1 = 100
num_2 = 168
num_find = []
for i in range(10000):
    for j in range(10000):
        if (i+100) == j*j :
            num_find.append(i)
            
for num in num_find:           
    for k in range(10000):
        if (num+100+168) == k*k:
            print(num)

问题在于:
1,遍历次数太多,且10000只是猜测的数字,搜索范围不明确

数学分析:用语言来表达数学问题
int m ,i, j
m+100 = i2
m+100+168 = j
2
转换一下:(数学思维:2个等式可以相减,相加)
j2-i2 = 168
实例化思考一下:()
【1,2,3,4,5,6,7…】(数学思维:实例化问题)
【22-12,32-2,42-32…]
【3,5,7,9,11…】(数学思维:找规律)
相临相减肯定会出现一个数值:2 *n+1 =168,则n=84.5
再找规律:相临2个数相减是最小的;则意味着超过84这个位置的数的平方与相临值的平方会超过168.所以j,i 的范围在【0:84】

接下来写代码:

#找到m2-n2 =168条件下,m和n的取值范围
for i in range(1000):
	if (i+1)**2-(i)**2>168:
		print(i)

num_list = [j for j in range(i)]#将取值范围转换为列表格式,默认从小到大排列
num_list_re = sorted(num_list,reverse = True)#对列表格式进行反转,从大到小排列

#找到范围后,在范围内遍历,找到m,n的值,这可以用m的值求解数值的值
for m in num_list_re:
	for n in num_list:
		if (m**2 - n**2) == 168:
			print(m,n)
			print(m**2-100)

运行结果如下:
84
41 43
1581
19 23
261
11 17
21
1 13
-99

你可能感兴趣的:(python来解数学问题)