2015-09-03 3 views
-1

(Обратите внимание, что как n1, так и n2 могут быть включены в массив, если они простые). Кроме того, простые числа в массиве должны быть в порядке возрастания.Учитывая два числа n1 и n2 в качестве входных данных, возвращаем массив, содержащий все простые числа между n1 и n2

public int[] getPrimes(int start,int stop){ 

     int flag=0; 
     int k=0; 
     int arr[] =new int[stop-start]; 

     if(start==1){ 
     for(int i=start+1; i<=stop; i++){  
     flag=0; 
     for(int j=2; j<=i/2; j++) 
     { 
     if(i%j==0) 
     { 
      flag=1; 
      break; 
     } 
     } 
     if(flag==0){ 
     arr[k]=i; 
     k++; 
     } 

     } 
    } 

     else{ 
     for(int i=start; i<=stop; i++){  
     flag=0; 
     for(int j=2; j<=i/2; j++) 
     { 
     if(i%j==0) 
     { 
      flag=1; 
      break; 
     } 
     } 
     if(flag==0){ 
     arr[k]=i; 
     k++; 
     if(k+1==0) 
     break; 
     } 

     } 
    } 
    return arr; 

    } 

TestCase Параметры

'1' '20' 

Testcase Expected Answer 

{2,3,5,7,11,13,17,19} 

My Answer 

{2,3,5,7,11,13,17,19,0,0,0,0,0,0,0,0,0,0,0} 

Ответ не может ограничить массив, любое предложение, пожалуйста? также, если можно оптимизировать мой код без использования какой-либо функции массива?

+0

отделка все нули. – Rustam

ответ

1

попытка возвращения отделан массив:

return Arrays.copyOf(arr, k); 

вместо

return arr; 
+0

, я новичок в массиве java, не совсем знакомый с помощью обрезки, вы можете мне помочь. –

+0

В методе 'getPrimes' измените' return arr' с 'return Arrays.copyOf (arr, k);' он вернет только элемент k – Rustam

+0

_ мне нужно импортировать любую библиотеку? потому что его показывает мне ошибку не удается найти символ return Arrays.copyOf (arr, k); –

2

В этой строке: int arr[] =new int[stop-start]; вы даете выходной массив размером 19 (в вашем примере), но проблема в том, что вы не знаете, сколько простых чисел существует между двумя индексами.

Значение по умолчанию в массиве Int's равно 0, поэтому все неиспользуемые индексы в массиве присваиваются этому значению.

Моя рекомендация будет заключаться в том, чтобы вместо использования стандартного массива использовать ArrayList<Integer>, потому что размер его расширяется по мере необходимости.

0

int []arr = new int[num2-num1];//an array of relatively a larger size for(int i=num1;i<=num2;i++){ for(int j=2;j<i;j++){ result = i%j;//this will calculate the modulus if(result==0)//yes then the number is composite break; } //this says that loop has executed i-1 times but factor not found if(result!=0){ arr[count] = i; count++; } }

Вы должны были добавлены некоторые комментарии для нас, чтобы понять ваш код, тем не менее, попробуйте эту логику, которая будет делить любое число от 2 до (число-1), если оно простое, то он должен должен быть разделен

Теперь, чтобы решить вашу проблему с печатью, ограничьте массив от (0 до подсчета) или до , массив имеет значение и распечатает массив.

+0

ваш код не будет работать, если тестовый пример начинается с 1. –

Смежные вопросы