用 0,1,2,3⋯7 这 8 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次)。
提示:以 0开始的数字是非法数字。
解题思路:全排列(0-8),对于num[0]=0的非法数字,不在计算之列
package 素数个数;
public class Main {
static boolean used[]=new boolean[8];
static int num[]=new int[10];
static int ants=0;
public static boolean check(int num[]){
int x=0;
if(num[0]==0) return false;
for(int i=0;i<8;i++){
x=x*10+num[i];
}
for(int i=2;i<Math.sqrt(x);i++){
if(x%i==0) return false;
}
return true;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
dfs(0);
System.out.println(ants);
}
public static void dfs(int x){
if(x==8){
if(check(num)) ants++;
}
for(int i=0;i<=7;i++){
if(!used[i]){
used[i]=true;
num[x]=i;
dfs(x+1);
used[i]=false;
}
}
}
}