用 0,1,2,3 \cdots 70,1,2,3⋯7 这 88 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次)。
提示:以 00 开始的数字是非法数字。
DFS+ 求素数
#include<iostream> #include<cstring> #include<cmath> using namespace std; bool vis[8]; int sum; void dfs(int x, int y) { if(y == 0) { int a = sqrt(x); for(int i = 2; i <= a; i++) { if(x % i == 0) return ; if(i == a) sum += 1; } return; } for(int i = 0; i <= 7; i++) { if(vis[i] == false) { vis[i] = true; dfs(x * 10 + i, y - 1); vis[i] = false; } } } int main() { memset(vis, false, sizeof(vis)); sum = 0; for(int i = 1; i <= 7; i++) { vis[i] = true; dfs(i, 7); vis[i] = false; } cout << sum << endl; }