题目描述
幸运数是波兰数学家乌拉姆命名的。它采用与生成素数类似的"筛法"生成。
首先从 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,⋯
输入描述
输入两个正整数 m,n, 用空格分开(m<n<10^6)。
输出描述
输出位于 m 和 n 之间的幸运数的个数(不包含 m 和 n )。
输入输出样例
示例
输入
1 20
输出
5
运行限制
- 最大运行时间:2s
- 最大运行内存: 64M
def dfs(n): t=s[n] if t>len(s):return#当所取的数大于列表长度时结束 else: for i in range(len(s)-1,0,-1):#从后向前进行删除操作不会影响前面的序列数 if i%t==0:s.remove(s[i]) dfs(n+1) start,end=map(int,input().split()) s=[0]+[i*2+1 for i in range(end//2)] ans=0#记录数目 dfs(2) for i in s: if start<i<end:ans+=1 print(ans)