(注意,如果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}
我的答案不能限制阵列,请问有什么建议吗?如果可以在不使用任何数组函数的情况下优化我的代码呢?
答案 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到计数)或直到 数组有值并打印数组。