java - 从数组中分离素数
问题描述
public class HelloWorld {
public static void main(String []args) {
int [] arr = {2, 5, 9, 6, 7, 13, 24, 42, 8};
int [] arr1 = new int[4];
int [] arr2 = new int[arr.length - arr1.length];
for(int i = 0; i < arr.length; i++) {
for(int j = 2; j <= arr[i]/2; j++) {
if(arr[i] % j == 0) {
System.out.println("Number is not prime " + arr[i]);
break;
}
else {
System.out.println("Number is prime " + arr[i]);
break;
}
}
}
}
}
程序应该检查一个数字数组并打印给定的数字是否为素数。出了点问题,因为前 2 个没有标记为素数。然后我不知道为什么 9 被当作质数。
解决方案
您的代码中有多个问题。
- 为什么 2 不被视为素数。
正如其他人解释的那样,
j <= arr[i]/2
是罪魁祸首。根据这个条件,j <= 1
和j == 2
。因此,循环不会被执行。 为什么 9 被视为素数。 第一次当
j == 2
和arr[i] == 9
。因为,9%2 != 0
,数字被打印为素数。for(int j = 2; j <= arr[i]/2; j++){ if(arr[i] % j == 0){ System.out.println("Number is not prime " + arr[i]); break; } else { System.out.println("Number is prime " + arr[i]); break; } }
建议:arr[i]/2
您可以使用数字的平方根来代替检查,而不是检查
。
如果需要,您可以参考以下程序:
public class PrimeNumber {
public static void main(String []args){
int [] arr = {2,3,4,5,9,6,7,13,24,42,8,400,101};
int [] arr1 = new int[4];
int [] arr2 = new int[arr.length - arr1.length];
boolean flag = true;
for(int i = 0; i < arr.length; i++){
if(arr[i] == 2 || arr[i] == 3 )
{
System.out.println("Number is prime " + arr[i]);
continue;
}
flag = true;
for(int j = 2; j <= Math.sqrt( arr[i] ); j++){
if(arr[i] % j == 0){
System.out.println("Number is not prime " + arr[i]);
flag = false;
break;
}
}
if ( flag )
{
System.out.println("Number is prime " + arr[i]);
}
}
}
}
推荐阅读
- laravel - 获取两个日期之间的日期并返回 Laravel 中可用的资源
- azure - 天蓝色 b2c okta saml 集成
- django - 我可以在我的模板中使用管理员样式的内联吗?
- angular - 从应用程序到库提供 function()
- django - Django:嵌套查询多对多关系上的聚合函数
- c# - 使用 OpenXML 理解 ListParagraph Number
- flutter - 错误的 otp 输入在颤动中重置会话 AWS 电话身份验证
- java - REST 模板的 postForObject() 和 exchange() 方法返回列表对象的空值
- android - 在Android中使用手势在画布上绘制圆圈时,正在绘制多个圆圈而不是一个
- mysql - 在 JSON mysql 中的两个 iso 日期之间搜索