1.题目描述
幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的"筛法"生成。
首先从 1 开始写出自然数 1,2,3,4,5,6,⋯
1 就是第一个幸运数。
我们从 2 这个数开始。把所有序号能被 2 整除的项删除,变为:
1 3 5 7 9⋯
把它们缩紧,重新记序,为:
1 3 5 7 9⋯
这时,3 为第 2 个幸运数,然后把所有能被 3 整除的序号位置的数删去。注意,是序号位置,不是那个数本身能否被 3 整除!!删除的应该是 5,11,17,⋯
此时 7 为第 3 个幸运数,然后再删去序号位置能被 7 整除的( 19,39,⋯)
最后剩下的序列类似:
1,3,7,9,13,15,21,25,31,33,37,43,49,51,63,67,69,73,75,79,⋯
2.输入描述
输入两个正整数 m,n, 用空格分开(m 1 20 3.输出描述 输出位于 m 和 n 之间的幸运数的个数(不包含 m 和 n ) 5 4.解题思路 模拟法:模拟寻找幸运数的过程 5.代码实现 //测试用例 m = 1 n = 20 cnt = 1 //默认有一个幸运数 //生成列表,其值为m+1到n-1 list1 = list(range(m+1, n)) //模拟过程 while list1[cnt] <= len(list1): //当幸运数的值大于列表长度停止 //删除列表中被幸运数整除的序号 for j in range(len(list1),0,-1): if j % list1[cnt] == 0: del list1[j-1] cnt += 1 print(cnt) 6.相关知识 range函数用于生成整数序列 语法:range(start, stop, step) range(2, 10, 2) # 生成 [2, 4, 6, 8] range(10, 2, -2) # 生成 [10, 8, 6, 4] 生成从 start 到 stop 之前的整数序列(即左闭右开),步长为 step。 step 可以是正数或负数,但不能为 0。