方法一 枚举判断
直接判断
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); long n=in.nextLong(); if(isPrime(n)){ System.out.println("Yes"); }else{ System.out.println("No"); } } public static boolean isPrime(long n){ if(n<=1){ return false; } for(long i=2;i*i<=n;i++){ if(n%i==0){ return false; } } return true; } }
方法二(本题不适用,因为n是1*10^12超过int范围(大概2*10^9)) 预处理埃氏筛
当需要重复判断使用预处理埃氏筛
import java.util.Scanner; import java.util.Arrays; public class Main { private static int MAX=1000001; public static boolean[] isPrime=new boolean[MAX]; static{ Arrays.fill(isPrime,true); isPrime[0]=isPrime[1]=false; for(int i=2;i<MAX/i;i++){ if(isPrime[i]){ for(long j=i*i;j<MAX;j+=i){ isPrime[(int)j]=false; } } } } public static void main(String[] args) { Scanner in=new Scanner(System.in); int T=in.nextInt(); int n; for(int i=0;i<T;i++){ n=in.nextInt(); if (isPrime[n]) { System.out.println("Yes"); } else { System.out.println("No"); } } } }
练习题目:https://www.nowcoder.com/practice/8afab457ef11456d8602ce6dc30db776