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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?相关的知识,希望对你有一定的参考价值。

#一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
'''
假设该数为 x。
1、则:x + 100 = n2, x + 100 + 168 = m2
2、计算等式:m2 - n2 = (m + n)(m - n) = 168
3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数
4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。
5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。
6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1。
7、接下来将 i 的所有数字循环计算即可。
'''
for i in range(1,85):
if 168 % i == 0:
j = 168 / i;
if i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
m = (i + j) / 2
n = (i - j) / 2
x = n * n - 100
print(x)

i=0
while True:
a=(i+100)**0.5
b=(i+268)**0.5

if (a-int(a))==0 and (b-int(b))==0:
print(a,b)
print('这个数是',i)

i+=1
参考技术A 此题求出来应该有四组答案。
此题应该是平方差公式应用,两个完全平方数的差是168。
x²-y²=168
(x+y)(x-y)=168
然后对168进行分解质因数
168=2*2*2*3*7
因为x,y都是自然数,所以x+y与x-y的奇偶性相同,而x+y与x-y的积168是偶数,所以x+y与x-y都不是偶数,按此进行拆分,有4组,(2,84),(4,42),(6,28),(12,14),这样得到的x、y也就有4组:
(43,41),(23,19),(17,11),(13,1)
参考技术B 设这个整数为x,x+100=m的平方,x+100+168=n的平方
n的平方-m的平方=168
(n+m)(n-m)=168
168=1×168=2×84=3×56=4×42=6×28=8×21=12×14
n+m和n-m的奇偶性是相同的,不可能一个奇数一个偶数
所以n+m=84,n-m=2或者n+m=42,n-m=4或者n+m=28,n-m=6或者n+m=14,n-m=12
参考技术C

从-100开始找到10000为止

参考技术D 该数是21
21+100=11×11
21+100+168=289=17×17

python基础练习题(一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?)

day2

---------------------------------------------------------------

实例003:完全平方数

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

 

仿佛不会思考,直接上手写。。。

1 k = 10001
2 for i in range(0,k):
3     for j in range(0,k):
4         if j*j ==(i+100):
5             for k in range(0,k):
6                 if k*k ==(i+268):
7                     print(i)
8                     continue

嗯,假装找到几个值,但这代码看得自己想吐,效率真TM慢,真low

标准答案

思路是:最坏的结果是n的平方与(n+1)的平方刚好差168,由于是平方的关系,不可能存在比这更大的间隙。至于判断是否是完全平方数,最简单的方法是:平方根的值小数为0即可。

结合起来:

1 n=0
2 while (n+1)**2-n*n<=168:
3     n+=1
4 
5 for i in range((n+1)**2):
6     if i**0.5==int(i**0.5) and (i+168)**0.5==int((i+168)**0.5):
7         print(i-100)

对比下,这里应该找到数的最大值,而我少了这一步,数学改补补了。对了求一个平方根可以用   x**0.5 == int (x**0.5)   ,脑子锈了。。。下面是个更烧脑的答案。。。

其他答案

分析:整数+100是一个完全平方数即大于0的数,所以这个数应该是大于-99,否则不会是完全平均数。

x+100 =n*n

x+100+168=m*m 

2x+268=n*n+m*m

2x=n*n+m*m-268

x=(n*n+m*m-268)*0.5

m*m-n*n=168,根据这条推断,100*100-99*99=10000-9801=199>168,所以m和n的值都小于100,那么x的值就小于10000,所以

 1 import math
 2 
 3 
 4 #方法一
 5 for i in range(-99,10000):
 6     x = int(math.sqrt(i+100))
 7     if x*x == i+100:
 8         y = int(math.sqrt(i+100+168))
 9         if y*y==i+100+168:
10             print(i)
11             
12             
13 #方法二,再次优化,以m,n来写代码,n<100,又因为m*m=n*n+168,所以m>math.sqrt(168),即m>13,这个方法循环次数更少
14 for m in range(13,100):
15     n = int(math.sqrt(m*m-168))
16     if n*n ==m*m-168:
17         print(m*m-168-100)

 

以上是关于python一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?的主要内容,如果未能解决你的问题,请参考以下文章

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

Python经典练习题1:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

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

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

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

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