import java.util.*; import java.util.regex.*; class JudegePrime { public static void main(String[] args) { Scanner sc =new Scanner(System.in); String sRegex = "^[1-9]\d*$"; Pattern p = Pattern.compile(sRegex); Matcher m = null; while(true) { System.out.println("请输入数据m:"); String sValue = sc.next(); m = p.matcher(sValue); if(!m.matches()) { System.out.println("输入数据不符合要求,请重新输入。"); continue; } if(bIsPrime(Integer.parseInt(sValue))) { System.out.println(sValue + "是素数。"); } else { System.out.println(sValue + "不是素数。"); } } } /* 用6N±1法求素数。 任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…) 显然,当N≥1时,6N,6N+2,6N+3,6N+4都不是素数,只有形如6N+1和6N+5的自然数有可能是素数。所以,除了2和3之外, 所有的素数都可以表示成6N±1的形式(N为自然数)。 */ private static boolean bIsPrime(int n) { if(n<2)return false; if(n==2 ||n==3)return true; if((n-1)%6==0 ||(n-5) % 6==0)return true; return false; } }