我在编写一个查找 2-50 之间的素数的程序时遇到了麻烦。我的程序现在找到“大部分”素数,但包括一些非素数。我知道有很多更有效的方法和策略可以找到素数,但在我转向更有效和更有效的策略之前,我会先尝试所有可能性。现在编写程序的方式,如果它确实找到了一个素数,它会打印多次,而我只希望它打印一次。我的程序在概念上是正确的还是我的理由有缺陷。为什么我的程序主要找到素数但抛出一些非素数?为什么我的程序会多次打印素数?
这是我解决问题的方法。
创建一个 for 循环来表示 2-50 之间的潜在质数。用变量“i”表示这些潜在的素数。这个循环将从 50 开始倒计时。
由于一个数字只有在除了它自己和 1 之外没有其他可整除的数字时才是素数,我想创建一个内部 for 循环来将 i 除以 2 和 i -1 之间的每个可能数字,以查看这些数字中的任何一个是否均分到 i . 用变量 j 表示这些可能的除数。如果在任何时候 j 确实均匀地划分为 i 它不是质数,所以我希望我的内部循环退出。
如果 i 除以 j 的所有数字并且没有数字均匀地除以 i 则该数字如果是素数并且想要打印该数字。
*
import acm.program.*;
public class PrimeNumber extends ConsoleProgram{
public void run(){
for (int i =50; i >= 2; i--){
for (int j= 2; j < i-1; j++){
if (i % j >= 1){
println(i);
}else{
if (i % j == 0) break;
}
} /*end of inner loop */
} /* end of for loop */
} /* end of run method */
}