[Java]检查一个数字是否为素数,使用extra-isPrime标志不起作用 我在2017年问了这个问题。我在2020年根据这些准则进行了更新。
这个问题是检查数字是否为素数,当然已经有不同的答案了。 但是我已经试了一整天,我不知道为什么我的方法不能正常工作[Java]检查一个数字是否为素数,使用extra-isPrime标志不起作用 我在2017年问了这个问题。我在2020年根据这些准则进行了更新。,java,primes,Java,Primes,这个问题是检查数字是否为素数,当然已经有不同的答案了。 但是我已经试了一整天,我不知道为什么我的方法不能正常工作 public class PrimeNum { private static boolean isPrime; private static Scanner input; public static void main(String[] args) { input = new Scanner(System.in);
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");
}
}
}
公共类素数
{
私有静态布尔互质;
专用静态扫描仪输入;
公共静态void main(字符串[]args)
{
输入=新扫描仪(System.in);
System.out.println(“输入一个素数(您认为):”;
int num=input.nextInt();
isPrime=false;
for(整型除数=2;除数
2020年5月更新:
我意识到我在问一个愚蠢的问题。
主要原因是没有在这里工作:
isPrime=false;
for(整型除数=2;除数
除数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;
}
}
import java.util.*;
类素数{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
System.out.println(“输入一个素数(您认为):”;
int num=input.nextInt();
if(ifPrime(num)){
System.out.println(num+“是一个素数”);
}
否则{
System.out.println(num+“不是素数”);
}
}
私有静态布尔ifPrime(int num){
for(整型除数=2;除数
在您的代码中
for(int divisor = 2; divisor < num / 2; divisor++) {
if(num % divisor == 0)
{
isPrime = false;
}
isPrime = true;
}
for(整型除数=2;除数
如果isPrime=false,那么您可以再次将其设置为true强>
你可以考虑这个问题:
isPrime = true;
for(int divisor = 2; divisor < num / 2; divisor++) {
if(num % divisor == 0)
{
isPrime = false;
break;
}
}
isPrime=true;
for(整型除数=2;除数
这里的主要问题是在每次迭代中覆盖isPrime
的值,因此如果您检查的最后一个除数没有除以num
,则将其解释为素数
一个更好的方法是假设一个数是素数,直到证明不是素数(即,直到找到它的除数)。一旦你找到了这样一个除数,你就可以打破
循环-这个数字不是素数,没有理由继续检查它:
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
}
}
isPrime=true;
对于(整型除数=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;
}
私有静态布尔isPrime;
专用静态扫描仪输入;
公共静态void main(字符串[]args){
输入=新扫描仪(System.in);
System.out.println(“输入一个数字(您认为):”;
字符串ch=input.next();
如果(是数字(ch)){
int num=Integer.parseInt(ch);
isPrime=true;
如果(num>1){
对于(整型除数=2;除数*除数请尝试以下方法:
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.
}
}
公共类素数{
公共静态void main(字符串参数[]){
int n1=100,n2=1000;
int c=0;
for(int i=n1;iperhapsbreak;
可能有用?@thomasewin i在isPrime=false之后添加,效果更好,但不适用于“3”、“5”,适用于“17”.@Xiaologli看到我的答案了为什么。@WendingPeng我看到了你的答案,你是对的!谢谢。我已经运行了你的代码,它看起来很有效。或者简单地返回true。@Krythic除非它是布尔方法,否则你不能返回true。如果我用这种方式,如果我键入4,它会说它是素数。但是如果我改为for(int divisor=2;divisordivisor
)确实错了,正如你所说的。你应该停下来(divisor哇,它成功了!!!天哪,你知道从这个小问题中,我学到了很多!非常感谢你!只要停在divisor,如果你评论你的答案并告诉它为什么解决了这个问题就好了。一个好的答案不仅仅局限于粘贴一些代码。