解题思路:
题目不太好理解。
每次删除的是序列号,最后保留的也是序列号。
按题目案例来说m,n = 30,69
它的意思就是在31~68中有多少个序列号是最后保留下来的序列号。最后保留下来的个数就是幸运数的个数。
那么我们可以先创建一个大小为69的数组B = [i for i in range(n)]
首先我们要将B中下标能整除2的删除del B[2::2]
接着我们要将B中下标能整除B[2]的删除
然后将B中下标能整除B[3]的删除
然后将B中下标能整除B[4]的删除
......
循环终止的条件是B[now] >= len(B)-1
最后检查一下31~38中有几个在B中就可以了。
注意事项:
参考代码:
def f(m,n): A = [int(i) for i in range(m+1,n)] B = [i for i in range(n)] del B[2::2] #先删除小标能整除2的 now = 2 while B[now] <= len(B)-1: #循环终止条件 del B[B[now]::B[now]] #删除小标为B[now]的 now = now+1 ans = 0 for item in A: #检查A中的序列号有几个在B中 if item in B: ans = ans+1 print(ans) if __name__ == '__main__': m,n = map(int,input().strip().split()) f(m,n)
0.0分
7 人评分