这个问题是检查数字是否为素数,当然已经有不同的答案了。 但我整天都在尝试,我找不到为什么我的方法不能正常工作。
public class PrimeNum
{
private static boolean isPrime;
private static Scanner input;
public static void main(String[] args)
{
input = new Scanner(System.in);
System.out.println("Enter a prime number ( you think ) : ");
int num = input.nextInt();
isPrime = false;
for(int divisor = 2; divisor < num / 2; divisor++) {
if(num % divisor == 0)
{
isPrime = false;
}
isPrime = true;
}
if(isPrime)
{
System.out.println("Prime");
}
else
{
System.out.println("Not a prime");
}
}
}
答案 0 :(得分:6)
这里的主要问题是你在每次迭代中都会覆盖isPrime
的值,所以如果你检查的最后一个除数没有除num
,你就把它解释为素数。
更好的方法是假设一个数字是一个素数,直到另有证明(即,直到你找到它的除数)。一旦你找到了这样一个除数,你可以break
离开循环 - 数字不是素数,并且没有理由继续检查它:
isPrime = true;
for(int divisor = 2; divisor <= num / 2; divisor++) {
if (num % divisor == 0) {
isPrime = false;
break; // num is not a prime, no reason to continue checking
}
}
答案 1 :(得分:1)
在您的代码中
for(int divisor = 2; divisor < num / 2; divisor++) {
if(num % divisor == 0)
{
isPrime = false;
}
isPrime = true;
}
如果isPrime = false,那么你再次将其设为true!
你可以考虑这个:
isPrime = true;
for(int divisor = 2; divisor < num / 2; divisor++) {
if(num % divisor == 0)
{
isPrime = false;
break;
}
}
答案 2 :(得分:-1)
试试这个:
public class prime{
public static void main (String args[]){
int n1=100, n2=1000;
int c=0;
for(int i=n1; i<=n2; i++)
if(isPrime(i)==true)
c++;
System.out.print(c);
}
public static boolean isPrime(int number)
{
for(int j=2; j<number; j++) //u go from number+1 to number to check
//if it can be divided by any other value.
if(number % j ==0) //if there is 1 other number that divides it then
//it returns false.
return false;
return true; //else it returns true.
}
}
答案 3 :(得分:-2)
private static boolean isPrime;
private static Scanner input;
public static void main(String[] args) {
input = new Scanner(System.in);
System.out.println("Enter a number ( you think ) : ");
String ch = input.next();
if (isNumeric(ch)) {
int num = Integer.parseInt(ch);
isPrime = true;
if (num > 1) {
for (int divisor = 2; divisor * divisor <= num; divisor++) {
if (num % divisor == 0) {
isPrime = false;
break;
}
}
} else {
isPrime = false;
}
if (isPrime) {
System.out.println("Prime");
} else {
System.out.println("Not a prime");
}
} else {
System.out.println("Should input a number");
}
}
public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*|\\-[0-9]*");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
return true;
}
}