Java 如何从3位数字中求出最大素数
我试图得到最大的素数,它是从3位数字,比如从100到999 但我的代码让我出错了Java 如何从3位数字中求出最大素数,java,Java,我试图得到最大的素数,它是从3位数字,比如从100到999 但我的代码让我出错了 public static void main(String[] args) { int i ,counter; //int arr[] = null; ArrayList<Integer> arr = new ArrayList<Integer>(); for(counter=101 ; counter <999;co
public static void main(String[] args) {
int i ,counter;
//int arr[] = null;
ArrayList<Integer> arr = new ArrayList<Integer>();
for(counter=101 ; counter <999;counter++){
boolean check = true ;
for(i=2;i<counter;i++){
if(counter%i == 0){
check = false;
break;
}
}
if(check){
for(int index = 0;index<=arr.size();index++){
arr.add(counter);
}
}
}
System.out.println(arr.get(arr.size()-1));
}
有什么问题吗?对不起,英语不好问题是由于以下代码段引起的
for(int index = 0;index<=arr.size();index++){
arr.add(counter);
}
相反。问题是由以下代码段引起的
for(int index = 0;index<=arr.size();index++){
arr.add(counter);
}
相反。您可能不需要最后一个
:
for(int index = 0;index<=arr.size();index++){
arr.add(counter);
}
并在外部打印:
for(int i = 0; i<arr.size(); i++){
System.out.println(arr.get(i);
}
for(int i=0;i您可能不需要最后一个for
:
for(int index = 0;index<=arr.size();index++){
arr.add(counter);
}
并在外部打印:
for(int i = 0; i<arr.size(); i++){
System.out.println(arr.get(i);
}
for(int i=0;i第二个for循环是不必要的,并保持循环。
对于最高数字,从999开始向下计数。
那么第一个结果就是最后一个
for (int counter = 999; counter >= 100; --counter) {
boolean check = true ;
for (int i = 2; i < counter/2; i++) {
if (counter%i == 0) {
check = false;
break;
}
}
if (check) {
System.out.println(counter);
break;
}
}
用于(int计数器=999;计数器>=100;--计数器){
布尔检查=真;
对于(int i=2;i
第二个for循环是不必要的,它会保持循环。
对于最高数字,从999开始向下计数。
那么第一个结果就是最后一个
for (int counter = 999; counter >= 100; --counter) {
boolean check = true ;
for (int i = 2; i < counter/2; i++) {
if (counter%i == 0) {
check = false;
break;
}
}
if (check) {
System.out.println(counter);
break;
}
}
用于(int计数器=999;计数器>=100;--计数器){
布尔检查=真;
对于(int i=2;i
公共静态void main(字符串[]args){
int i,计数器;
整数greatestPrime=null;
//int arr[]=null;
/*ArrayList arr=新的ArrayList()*/
用于(计数器=101;计数器<999;计数器++){
布尔值isPrime=true;
对于(i=2;ipublicstaticvoidmain(字符串[]args){
int i,计数器;
整数greatestPrime=null;
//int arr[]=null;
/*ArrayList arr=新的ArrayList()*/
用于(计数器=101;计数器<999;计数器++){
布尔值isPrime=true;
对于(i=2;i /*for(int index=0;indexIt在我看来,if(check)
中的for
循环将导致无限循环。您可以使用调试器轻松地进行检查。也许@arnauddenoylle提到的for循环应该被删除?但保留循环中的语句(即替换为arr.add(counter);
)更短:IntStream.iterate(999,n->n-1)。filter(n->IntStream.range(2,(int)Math.sqrt(n)).allMatch(k->n%k!=0)).findFirst()
@tobias_k甚至更快,不需要从2检查到n。相反,您可以只从2检查到n^1/2。在我看来,if(check)中的for
循环
将导致无限循环。您可以使用调试器轻松地检查这一点。也许@ArnaudDenoyelle提到的for循环应该删除?但保留循环中的语句(即替换为arr.add(counter);
)更短:IntStream.iterate(999,n->n-1)。filter(n->IntStream.range(2,(int)Math.sqrt(n) ).allMatch(k->n%k!=0)).findFirst()
@tobias_k更快,不需要从2到n进行检查。相反,您可以只从2到n进行检查^1/2。您甚至不需要数组;只需存储计数器的最新值即可。为什么不从999到100启动for循环,这样您会比其他答案更快地找到最大素数,不是吗agree@shashi好糖手势:)我会的,你甚至不需要数组;只需存储计数器的最新值即可。为什么不从999开始for循环到100,这样你会比其他答案更快地找到最大素数,不是吗agree@shashi很好的建议:)我会的