这道题是检查这个数是不是质数,当然已经有不同的答案了。但是我试了一天,都找不到为什么我的方法不能正常使用。
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");
}
}
}
我意识到我问了一个愚蠢的问题. 主要的原因是这里没有工作:
isPrime = false;
for(int divisor = 2; divisor < num / 2; divisor++) {
if(num % divisor == 0)
{
isPrime = false;
}
isPrime = true; // May 2020: no matter what num, it will become true here.
}
import java.util.*;
class Prime {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("Enter a prime number ( you think ) : ");
int num = input.nextInt();
if(ifPrime(num)) {
System.out.println(num + " is a prime number");
}
else {
System.out.println(num + " is a NOT prime number");
}
}
private static boolean ifPrime(int num) {
for(int divisor = 2; divisor < num; divisor++) {
if( num != divisor && num % divisor == 0){
return false;
}
}
return true;
}
}
这里的主要问题是,你覆盖的值是 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
}
}
在你的代码中
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;
}
}
用这个试试
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.
}
}
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 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;
}
}