假设有两个变量,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 =make 5),并根据with 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)发布于 2018-11-11 18:22:36
您可能不想为此进行循环。如果k和m相隔很远,就需要很长时间。
给定k< m,您需要计算有多少个整数l使得k< l^2 < m。这样的整数可能的最小值是floor( sqrt(k) +1 ),而可能的最大值是ceil(sqrt(m)-1)。这样的整数的数量是:
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发布于 2018-11-11 18:18:48
您的代码将第二个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)表示的事实,有一个简单的方法可以加速上述算法-但算法将变得更长…
发布于 2018-11-11 18:26:49
这是您的函数的另一个版本,它似乎可以满足您的要求。
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)https://stackoverflow.com/questions/53247520
复制相似问题