假定有两个变量k和m,每个变量已经与一个正整数相关联,并且进一步假定k的值小于m的值。编写计算k和m之间的完美平方数所需的代码。 (一个完美的平方是一个整数,例如9、16、25、36,它等于另一个整数的平方(在这种情况下分别为3 * 3、4 * 4、5 * 5、6 * 6)。)您使用变量q进行计算。例如,如果k和m的值分别为10和40,则应将3分配给q,因为在10和40之间存在以下完美的平方:16、25和36。
**如果我想计算16到100之间的数字(5,6,7,8,9 = 5)并用i和j编写代码,我的代码如下,错误。我想最后得到结果5。我该如何纠正?
k=16
m=100
i=0
j=0
q1=0
q2=0
while j**2 <m:
q2=q2+1
while i**2 <k:
q1=q1+1
i=i+1
j=j+1
print(q2-q1)
答案 0 :(得分:1)
您可能不想为此循环。如果k和m相距很远,将需要很长时间。
给定k 这允许 收益:import math
def sq_between(k,m):
return math.ceil(m**0.5-1) - math.floor(k**0.5+1) +1
sq_between(16,100)
5
答案 1 :(得分:0)
您的代码在第二个while循环中混合了所有内容。如果您进一步解释您要在此做些什么,我也许可以解释您的想法为何行不通。
我将按以下方式更改您的代码,以使其正常工作:
k = 10
m = 40
i = 0
q = 0
while i ** 2 < m:
if i ** 2 > k:
print(i)
q += 1
i += 1
print (q)
利用每个平方数都可以通过square = sum from i = 1 to n (2 * i + 1)
表示的事实,有一种简便的方法可以加快上述算法的速度-但是该算法将变得比...更长。
答案 2 :(得分:0)
这是函数的另一个版本,似乎可以满足您的要求。
k = 16
m = 100
perfect_squares = []
for i in range(m):
if i**2 < k:
continue
if i**2 > m:
break
perfect_squares.append(i**2)
print(perfect_squares)