题目描述
小明在研究素数,已知素数序列为2、3、5、7、……,即第一个素数是2,第二个是3,……。他为搞清一些素数究竟在素数集合中排名老几,伤透了脑筋。还是请你帮他编个程序搞定吧,否则,他慢腾腾慢腾腾地数,数到什么时候去?
输入
输入有正整数N(1≤N≤1000000)若干。
输出
运行结果每个数占1行,结果中的每个数是输入的正整数在素数集合中的排位。如果输入的不是素数(这太有可能了),那就输出一个0表示。
样例输入 Copy
2
6
4
5
13
样例输出 Copy
1
0
0
3
6
提示
可以考虑用筛选法求解,能提高效率。
先解释一下筛选法的步骤:
<1>先将1去掉
<2>将2的倍数去掉。
<3>将3的倍数去掉。
……
<i>将i的倍数去掉。
要得到不大于某个自然数N的所有素数,只要在2~N中将不大于sqrt(N)的素数的倍数全部划去即可。