给定两个数字n1和n2作为输入,返回一个包含n1和n2之间所有素数的数组

时间:2015-09-03 10:44:02

标签: java arrays

(注意,如果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;

   }

测试用例参数

'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}

我的答案不能限制阵列,请问有什么建议吗?如果可以在不使用任何数组函数的情况下优化我的代码呢?

3 个答案:

答案 0 :(得分:2)

在这一行:int arr[] =new int[stop-start];你给输出数组大小为19(在你的例子中),但问题是你不知道2个索引之间有多少个素数。

Int的数组中的默认值为0,因此数组中所有未使用的索引都被赋值给该值。

我的建议是使用ArrayList<Integer>代替标准数组,因为它的大小会在必要时扩展。

答案 1 :(得分:1)

尝试返回修剪过的数组:

return Arrays.copyOf(arr, k);

而不是

return arr;

答案 2 :(得分: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到计数)或直到 数组有值并打印数组。