2015-06-07 3 views
-1

Я не могу определить, какие тестовые примеры ниже приведенный ниже код. проблема:Генератор первичного номера между двумя номерами

Все заявки на эту проблему доступны.

Shridhar хочет сгенерировать некоторые простые числа для своей криптосистемы. Помоги ему! Ваша задача - сгенерировать все простые числа между двумя заданными числами. Ввод

В первой строке содержится t, количество тестовых случаев (меньше или равно 10).

Вслед за т линиями, которые содержат два числа т и п (1 = т < < < = п = 1 миллиард, п-т < = 100000), разделенных пробелом. Выход

Для каждого теста вывести все простые числа р такие, что т = р < < = п, одно число в каждой строке. Отделите ответы для каждого тестового примера пустой строкой. Пример

Input: 
2 
1 10 
3 5 
Output: 
2 
3 
5 
7 

3 
5 
import java.util.Scanner; 

public class Main implements Runnable { 

    public static void main(String args[]) { 
     new Main().run(); 
    } 

    @Override 
    public void run() { 
     Scanner sc = new Scanner(System.in); 
     Integer d; 
     try { 
      d = sc.nextInt(); 
      boolean isPrime[] = new boolean[100000]; 
      for (int i = 0; i < d; i++) { 
       int m = sc.nextInt(); 
       int n = sc.nextInt(); 
       if (n <= 0 || m > n) { 
        continue; 
       } 
       if (m <= 0) { 
        m = 2; 
        if (m > n) { 
         continue; 
        } 
       } 
       if (m == 1) { 
        m = 2; 
       } 
       if (m == 2 && n - m == 0) { 
        System.out.println(2); 
       } else { 
        for (int k = 0; k <= n - m; k++) { 
         isPrime[k] = true; 
        } 
        int sqrt = (int) Math.sqrt(n); 
        for (int j = 2; j <= sqrt; j++) { 
         int k = (m % j == 0) ? m/j : (m + j)/j; 
         for (; k <= n/j; k++) { 
          if (!(m == 2 && (j * k == 2)) && k != 1) { 
           isPrime[j * k - m] = false; 
          } 
         } 
        } 
        for (int a = m; a <= n; a++) { 
         if (isPrime[a - m]) { 
          System.out.println(a); 
         } 
        } 
       } 
       System.out.println(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      sc.close(); 
     } 
    } 
} 
+1

это выглядит как домашнее задание: D –

+0

из справочного центра: «Вопросы просят домашних заданий должны включите резюме работы, которую вы сделали до сих пор, чтобы решить проблему, и описание проблемы, которую вы решаете ». – GabrielOshiro

+0

Его проблема с кодеком не домашнее задание. Когда я пытаюсь представить, у меня не получается какой-либо тестовый пример. –

ответ

2

Ваша проблема с этим:

boolean isPrime[] = new boolean[100000]; 

и это:

for (int k = 0; k <= n - m; k++) { 
    isPrime[k] = true; 
} 

, потому что некоторое время n - m = 100000 то вам нужно isPrime[100000], которые, которого не выделяют, так что вы должны объявить IsPrime как это:

boolean isPrime[] = new boolean[100001]; 
Смежные вопросы