近期发现部分用户尝试利用判题系统的评测信息进行作弊,严重破坏了公平竞争的环境。为维护良好的交流与学习氛围,已对判题机进行了优化,当程序遇到测试点不通过时会立即返回而不评测更多测试点;并且延长提交间隔为60秒。作弊行为不仅违背了学习的初衷,还侵害了其他用户的公平权益,希望所有用户能够遵守规范,专注算法与思维能力的提升。对于恶意多次尝试的用户,我们将保留进一步处置的权利。 —— Administrator

100707 - 素数筛

时间限制

200 毫秒

内存限制

128 MB

通过次数

16

提交次数

33

我们学习过素数判定方法——遍历可能的因数。但如果数据量很大就无法在规定时间内找出结果。素数筛可以解决这个问题,素数筛用于快速确定一定范围内哪些数是素数。它的基本思想是:

大于1的数不是素数就是合数,而合数可以被除了1和本身以外的数整除,于是2乘2、3、4……都是合数,3乘3、4、5……都是合数,5乘5、6、7……都是合数,没有被标记为合数的都是素数。这种巧妙的算法之所以效率好很多,是因为避免了每个数都需要单独验证而且把运算速度较慢的除法用乘法代替。当然,你有兴趣还可以考虑如何避免像18这样的数被计算了多次进一步提高效率。

现在,我们做一个关于素数筛的基础练习,这个练习只需要基本的素数筛算法就可以AC:

求从ab有多少素数。

基本素数筛演示:

输入

一行,用单个空格分隔的两个整数,分别表示ab

对于40%的数据:

1 \le a \le b \le 1\cdot 10^3

对于80%的数据:

1 \le a \le b \le 1\cdot 10^5

对于100%的数据:

1 \le a \le b \le 1\cdot 10^7

输出

一行,一个整数,表示所求个数。

样例

输入

1 11

输出

5