简体   繁体   English

检查素数的循环

[英]A loop for checking prime number

package pureTest;
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class test3 {    
        public static void main(String[] args) {
            /* Enter your code here. */
            Scanner sc = new Scanner(System.in);
            int n = sc.nextInt();
            for (int i = 2; i< n; i++){
              if( n <= 3){
                  System.out.println("Prime");
                  break;
              }else if( n%i ==0){
                   System.out.println("Not Prime");
                   break;
              }else{
                  System.out.println("Prime");
              }
            }

          }
      }

the input of 7; 输入7; the out put is repetitions of Prime: 输出是Prime的重复:

7
Prime
Prime
Prime
Prime
Prime

Just wondering why the if condition doesn't work out here. 只是想知道为什么if条件不能在这里解决。

Your else clause is wrong. 您的else子句是错误的。 It prints "Prime" each time n is not divisible by i . 每当n不被i整除时,它将打印“ Prime”。 It will even print prime for non prime inputs (for example, it will print "Prime" for 21 before printing "Not Prime", since 21%2 != 0). 它甚至会为非素数输入打印prime数(例如,由于21%2!= 0,它将在打印“非素数”之前打印“素数”为21)。

Change your loop to something like : 将循环更改为:

      for (int i = 2; i < n; i++) {
          if( n <= 3){
              System.out.println("Prime");
              return;
          } else if(n%i == 0){
              System.out.println("Not Prime");
              return;
          }
      }
      System.out.println("Prime");

your code will print prime until it finds divisor ! 您的代码将打印质数,直到找到除数!

for (int i = 2; i< n; i++){
          if( n <= 3){
              System.out.println("Prime");
              break;
          }else if( n%i ==0){
               System.out.println("Not Prime");
               break;
          }else{
              System.out.println("Prime"); --> this line will be printed every time in your loop!
          }
        }

Also you don't need to iterate till n, as after n/2 there would be no number which can divide n :-) 另外,您不需要迭代到n,因为在n / 2之后将没有数字可以除以n :-)

Check this code... 检查此代码...

private static boolean checkPrime(int n) {
    int i = 2;
    while(i<=n/2){
        if(n%i++ == 0){
            return false;
        }
    }
    return true;
}
public static void main(String[] args) {
        /* Enter your code here. */
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        boolean isPrime = true;
        for (int i = 2; i< n; i++){
          if( n <= 3){
              break;
          }else if( n%i ==0){
               System.out.println("Not Prime");
               break;
          }
        }
        if (isPrime) {
            System.out.println("Prime");
        } else {
            System.out.println("Not prime");
        }
      }

If you want to simply check in the main function the above is ok. 如果您只想签入main功能,上面的操作就可以了。 If you want to do that well try the following: 如果您想做的很好,请尝试以下操作:

public static void main() {
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    if (isPrime(n)) {
        System.out.println("Prime");
    } else {
        System.out.println("Not prime");
    }
}

boolean isPrime(int n) {
    if (n < 2) {
        return false;
    if (n == 2)
        return true;
    if (n%2 == 0)
        return false;
    for (int i = 3; i*i<=n; i+=2){
        if (n%i == 0)
            return false
    return true;
}
boolean isPrime = true;
    Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
    for (int i = 2; i< n; i++){
        if(n%i==0) {
          System.out.println("Not Prime");
          isPrime=false;
          break;
       }
    }

    if(isPrime) {
       System.out.println("Prime");
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM