题面
核心思想
素数筛先预处理出20以内的素数
然后用全排列的思想去做就好了,就是多了个判断。
代码
import java.util.*;
public class Main {
static final int MAXN = (int) (21);
static int[] isNotPrime = new int[21];
static int[] v = new int[11];
static List<Integer> cur = new ArrayList<>();
static int res = 0;
public static void main(String[] args) {
final long MOD = (long) (1e9 + 7);
Scanner in = new Scanner(System.in);
int n = in.nextInt();
//欧拉筛 MAXN = 21
List<Integer> primes = new ArrayList<>();
for(int i = 2; i < MAXN; i++){
if(isNotPrime[i] == 0)
primes.add(i);
for(int num: primes){
if(i * num >= MAXN)
break;
isNotPrime[i * num] = 1;
if(i % num == 0)
break;
}
}
helper(n);
System.out.println(res);
}
static void helper(int n){
if(cur.size() == n){
res ++;
}
for(int i = 1; i <= n; i++){
if(v[i] == 1) // 访问标记
continue;
// 是空 或者 当前选择的 i 加上 最后一个数 不是素数
if(cur.isEmpty() || isNotPrime[i + cur.get(cur.size() - 1)] == 1){
cur.add(i);
v[i] = 1;
helper(n);
cur.remove(cur.size() - 1);
v[i] = 0;
}
}
}
}
标签:24,int,游游,num,static,秋招,new,primes,MAXN
From: https://www.cnblogs.com/ganyq/p/18130623