好久没写了,今天做题有点忘了,不会写了。重新做了一份,整理出来。
1 import java.util.Scanner; 2 3 4 public class 判断质数 { 5 public static boolean isPrimeNumber(int num){ 6 if(num==2)return true; 7 if(num<2||num%2==0)return false; 8 for(int i=3;i<=Math.sqrt(num);i+=2){ 9 if(num%i==0){ 10 return false; 11 } 12 } 13 return true; 14 15 } 16 public static void main(String[] args) { 17 Scanner sc=new Scanner(System.in); 18 int n=sc.nextInt(); 19 if(isPrimeNumber(n)){ 20 System.out.println(n);; 21 } 22 } 23 24 }
例题:
用 0,1,2,3⋯7这 8 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次)。
提示:以 000 开始的数字是非法数字。
1 public class 求质数 { 2 public static boolean isPrime(int num){ 3 if(num==2)return true; 4 if(num<2||num%2==0) return false; 5 for(int i=3;i<=Math.sqrt(num);i++){ 6 if(num%i==0)return false; 7 } 8 return true; 9 } 10 public static void main(String[] args) { 11 // TODO Auto-generated method stub 12 boolean used[]=new boolean[8]; 13 for(int i=0;i<8;i++){ 14 used[i]=false;; 15 } 16 int num; 17 int count=0; 18 for(int a=1;a<8;a++){ 19 used[a]=true; 20 for(int b=0;b<8;b++){ 21 if(used[b])continue; 22 else used[b]=true; 23 for(int c=0;c<8;c++){ 24 if(used[c])continue; 25 else used[c]=true; 26 for(int d=0;d<8;d++){ 27 if(used[d])continue; 28 else used[d]=true; 29 for(int e=0;e<8;e++){ 30 if(used[e])continue; 31 else used[e]=true; 32 for(int f=0;f<8;f++){ 33 if(used[f])continue; 34 else used[f]=true; 35 for(int g=0;g<8;g++){ 36 if(used[g])continue; 37 else used[g]=true; 38 for(int h=0;h<8;h++){ 39 if(used[h])continue; 40 else used[h]=true; 41 num=10000000*a+1000000*b+100000*c+10000*d+1000*e+100*f+10*g+h; 42 if(isPrime(num)){ 43 count++; 44 } 45 used[h]=false; 46 } 47 used[g]=false; 48 } 49 used[f]=false; 50 } 51 used[e]=false; 52 } 53 used[d]=false; 54 } 55 used[c]=false; 56 } 57 used[b]=false; 58 } 59 used[a]=false; 60 61 } 62 System.out.println(count); 63 64 } 65 66 }
我用了0-7的全排列,因为第一个数不能为0,所以从1开始。得到的数进行素数判断