Peter wants to generate some prime numbers for his cryptosystem. Help him!Your task is to generate all prime numbers between two given numbers!
Input
The input begins with the number t of test cases in a single line (t<=10). In each of the next t lines there are two numbers m and n (1 <= m <= n <= 1000000000, n-m<=100000) separated by a space.
Output
For every test case print all prime numbers p such that m <= p <= n,one number per line, test cases separated by an empty line.
Example
Input: 2 1 10 3 5 Output: 2 3 5 7 3 5彼得想要为密码系统生成一些质数。 帮助他!你的任务是生成两个给定的数字之间的所有素数!
输入
测试用例的输入始于t(t < = 10)。 在下面t行中,每行有两个数m和n(1 < = m < = n < = 1000000000,n - m < = 100000)之间用一个空格来分隔。
输出
为每个测试用例打印所有素数p,m < = p < = n,每行一个数量,测试用例之间以空行隔开。
例子
Input: 2 1 10 3 5 Output: 2 3 5 7 3 5class Main { public static void main (String[] args) throws java.lang.Exception { int a = 31623; //[2,n]中每一个合数都存在不大于floor(sqrt(n))的质因子(否则意味着所有质因子都大于floor(sqrt(n)), int pNum = 0; //而合数至少有两个质因子,于是合数大于n,矛盾)。所以,我们只需要把[2, sqrt(n)],即[2, 31623]以内的素数筛出来。 int[] p = new int[a]; int[] flag = new int[a]; for (int i = 2; i < a; i++) { if(flag[i] == 0) p[pNum++] = i; for(int j = 0; j < pNum && p[j] * i < a; j++) { flag[p[j]*i] = 1; if(i%p[j] == 0) break; } } Scanner input = new Scanner(System.in); int t = input.nextInt(); while(t > 0) { int[] flag1 = new int[100001]; int m = input.nextInt(); int n = input.nextInt(); for (int i = 0; i < pNum; i++) { for (int j = p[i] * (m/p[i]); j <= n; j += p[i]) { if (m == 1) //去掉1 flag1[0] = 1; if (j >= m && j != p[i]) //只去掉合数 { flag1[j - m] = 1; } } } for (int i = m; i <= n; i++) { if (flag1[i-m] == 0) { System.out.println(i); } } System.out.println("\n"); t--; } } }