在Java中测试素数-添加附加条件

在Java中测试素数-添加附加条件,java,Java,我是初学者。所以我想写一个程序,打印出用户输入的所有素数。例如,用户输入5,程序输出2和3。然而,我所理解的是,如果我想让程序打印出用户输入的数字是否为素数(简单的是或否),如果输入的数字大于,比方说50,该怎么办。以下是第一部分的代码: public class Primes { public static void main(String args[]) { System.out.println("All primes up to: ");

我是初学者。所以我想写一个程序,打印出用户输入的所有素数。例如,用户输入5,程序输出2和3。然而,我所理解的是,如果我想让程序打印出用户输入的数字是否为素数(简单的是或否),如果输入的数字大于,比方说50,该怎么办。以下是第一部分的代码:

public class Primes {      

  public static void main(String args[]) {    

    System.out.println("All primes up to: ");  

    int num = new Scanner(System.in).nextInt();  

    System.out.println("Prime numbers from 1 to " + num + " are: ");  

    for(int number = 2; number<=num; number++){  
        if(isPrime(number)){  
            System.out.println(number);  
        }   
     }  

  }  

  public static boolean isPrime(int number){  
      for(int i=2; i<number; i++){  
         if(number%i == 0){  
             return false;   
         }  
      }  
    return true;   
  }  
}       
公共类素数{
公共静态void main(字符串args[]){
System.out.println(“所有素数到:”);
int num=新扫描仪(System.in).nextInt();
System.out.println(“从1到“+num+”的素数是:”;
对于(整数=2;数字
然而,我正在努力解决的问题是,如果我想让程序打印出用户输入的数字是否为素数(简单的是或否)

您当前的
isPrime
功能似乎正常工作,因此只需输入一个数字并测试它即可

Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
  System.out.println("Enter a number (is it prime): ");
  int num = scanner.nextInt();
  if (isPrime(num)) {
    System.out.printf("%d yes%n", num);
  } else {
    System.out.printf("%d no%n", num);        
  }
}
或者用三元

Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
  System.out.println("Enter a number (is it prime): ");
  int num = scanner.nextInt();
  System.out.printf("%d %s%n", num, isPrime(num) ? "yes" : "no");
}
编辑根据您的评论,将打印顺序移动到方法

public static void primesUpTo(int num) {
  System.out.println("Prime numbers from 1 to " + num + " are: ");
  for (int number = 2; number <= num; number++) {
    if (isPrime(number)) {
      System.out.println(number);
    }
  }
}
publicstaticvoidprimesupto(int-num){
System.out.println(“从1到“+num+”的素数是:”;
用于(整数=2;数字50){
System.out.printf(“%d%s%n”,num,isPrime(num)?“是”:“否”);
}否则{
primesUpTo(num);//试试这个

  int j = 2;   //variable
      int result = 0; //variable
      int number = 0; //variable
      Scanner reader = new Scanner(System.in); //Scanner object
      System.out.println("Please enter a number: "); //Instruction
      number = reader.nextInt(); //Get the number entered
      while (j <= number / 2) //start loop, during loop j will become each number between 2 and 
      {                             //the entered number divided by 2
          if (number % j == 0) //If their is no remainder from your number divided by j...
      {
         result = 1;  //Then result is set to 1 as the number divides equally by another number, hergo
    }                //it is not a prime number
    j++;  //Increment j to the next number to test against the number you entered
  }
  if (result == 1)  //check the result from the loop
  {
   System.out.println("Number: " + number + " is Not Prime."); //If result 1 then a prime     
}
  else
 {
  System.out.println("Number: " + number + " is Prime. "); //If result is not 1 it's not a prime
 }     
int j=2;//变量
int result=0;//变量
int number=0;//变量
扫描仪阅读器=新扫描仪(System.in);//扫描仪对象
System.out.println(“请输入一个数字:”;//说明
number=reader.nextInt();//获取输入的数字

而(j编辑:

public class PrimeSieve {
public static void main(String[] args) { 
    int N = Integer.parseInt(args[0]);

    // initially assume all integers are prime
    boolean[] isPrime = new boolean[N + 1];
    for (int i = 2; i <= N; i++) {
        isPrime[i] = true;
    }

    // mark non-primes <= N using Sieve of Eratosthenes
    for (int i = 2; i*i <= N; i++) {

        // if i is prime, then mark multiples of i as nonprime
        // suffices to consider mutiples i, i+1, ..., N/i
        if (isPrime[i]) {
            for (int j = i; i*j <= N; j++) {
                isPrime[i*j] = false;
            }
        }
    }

    // count primes
    int primes = 0;
    for (int i = 2; i <= N; i++) {
        if (isPrime[i]) primes++;
    }
    System.out.println("The number of primes <= " + N + " is " + primes);
}
}
您当前的代码似乎工作正常。


根据您在其中一条评论中提到的疑问:
Yes,但我在哪里添加if语句来执行以下操作:如果输入的数字小于50,则程序将打印出输入数字之前的所有素数。如果用户输入的数字大于50,则只会告知输入的数字是否为素数(简单地说“这是质数”或“不,这不是质数”)。希望这能让事情变得更清楚

您需要在接受输入后进行检查:

int num = new Scanner(System.in).nextInt();  

if( number > 50 )
{
    if(isPrime(number))
    {
       // print out is prime
    }
    // print out it is not prime
}

else
{
    System.out.println("Prime numbers from 1 to " + num + " are: ");  

    for(int number = 2; number<=num; number++){  
       if(isPrime(number)){  
            System.out.println(number);  
        }   
    }
 }  
删除(筛选)2的倍数,结果是:

2  3     5     7     9    11    13    15    17    19    21    23    25    27    29
列表中2之后的第一个数字是3;从列表中选择3的倍数可得到:

2  3     5     7          11    13          17    19          23    25          29
列表中3之后的第一个数字是5;从列表中删除剩余的5的倍数:

2  3     5     7          11    13          17    19          23                29
列表中5之后的第一个数字是7,但7的平方是49,大于30,因此过程结束。最后的列表包含所有小于或等于30的素数

这是附加的代码以供参考(免责声明:我是从网站上获取此代码的。只是将其粘贴在这里以获得更直接的可见性)

代码:

public class PrimeSieve {
public static void main(String[] args) { 
    int N = Integer.parseInt(args[0]);

    // initially assume all integers are prime
    boolean[] isPrime = new boolean[N + 1];
    for (int i = 2; i <= N; i++) {
        isPrime[i] = true;
    }

    // mark non-primes <= N using Sieve of Eratosthenes
    for (int i = 2; i*i <= N; i++) {

        // if i is prime, then mark multiples of i as nonprime
        // suffices to consider mutiples i, i+1, ..., N/i
        if (isPrime[i]) {
            for (int j = i; i*j <= N; j++) {
                isPrime[i*j] = false;
            }
        }
    }

    // count primes
    int primes = 0;
    for (int i = 2; i <= N; i++) {
        if (isPrime[i]) primes++;
    }
    System.out.println("The number of primes <= " + N + " is " + primes);
}
}
公共类PrimeSieve{
公共静态void main(字符串[]args){
int N=Integer.parseInt(args[0]);
//最初假设所有整数都是素数
布尔值[]isPrime=新布尔值[N+1];

对于(int i=2;i如果我正确理解问题:

  • 若用户输入的数字小于或等于50,则打印所有小于该数字的素数
  • 否则,如果输入的数字是素数,只需写入即可
使用已存在的
isPrime()
方法:

int num = new Scanner(System.in).nextInt();

if (num <= 50) {
    System.out.println("Prime numbers from 1 to " + num + " are: ");

    for (int number = 2; number <= num; number++) {
        if (isPrime(number)) {
            System.out.println(number);
        }
    }
} else { //num > 50
    if(isPrime(num)) {
        System.out.println(num + " is prime.");
    } else {
        System.out.println(num + " isn't prime.");
    }
}
int num=新扫描仪(System.in).nextInt();

if(num)您需要一个
if
语句来检查数字是否大于50…您尝试了什么?if(isPrime(number)&&number>50){…}同样,在
isPrime()中
方法,您只需在
循环中检查数字/2。大于输入数字一半的数字永远不会是一个因子。我尝试添加if,但它不起作用,因为我不知道确切的位置。此外,还有一些提示:从3开始数字,然后增加2(因为所有的even都不是素数),当你检查一个数是否为素数时,你只需要迭代到该数的平方根,因为一个数的因子是围绕平方根镜像的。是的,但是我应该在哪里添加if语句来执行以下操作:如果输入的数小于50,那么程序将打印出所有的素数,直到输入的数。如果用户输入的数字大于50,它只告诉用户输入的数字是否为素数(简单地说“它是素数”或“不,它不是素数”).希望这能让事情变得更清楚:p.@arri根据您的评论进行了编辑。请使用容量更大的数据类型,如
long”。如果这还不够,那么您可以考虑使用
BigInt`。
public class PrimeSieve {
public static void main(String[] args) { 
    int N = Integer.parseInt(args[0]);

    // initially assume all integers are prime
    boolean[] isPrime = new boolean[N + 1];
    for (int i = 2; i <= N; i++) {
        isPrime[i] = true;
    }

    // mark non-primes <= N using Sieve of Eratosthenes
    for (int i = 2; i*i <= N; i++) {

        // if i is prime, then mark multiples of i as nonprime
        // suffices to consider mutiples i, i+1, ..., N/i
        if (isPrime[i]) {
            for (int j = i; i*j <= N; j++) {
                isPrime[i*j] = false;
            }
        }
    }

    // count primes
    int primes = 0;
    for (int i = 2; i <= N; i++) {
        if (isPrime[i]) primes++;
    }
    System.out.println("The number of primes <= " + N + " is " + primes);
}
}
int num = new Scanner(System.in).nextInt();

if (num <= 50) {
    System.out.println("Prime numbers from 1 to " + num + " are: ");

    for (int number = 2; number <= num; number++) {
        if (isPrime(number)) {
            System.out.println(number);
        }
    }
} else { //num > 50
    if(isPrime(num)) {
        System.out.println(num + " is prime.");
    } else {
        System.out.println(num + " isn't prime.");
    }
}