用 0,1,2,3⋯70,1,2,3 cdots 70,1,2,3⋯7 这 888 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次)。
提示:以 000 开始的数字是非法数字。
代码:
#include <iostream> #include <cstdio> using namespace std; int c,vis[10]; int ispri(int n) { if(n==2||n==3)return 1; if(n%6!=1&&n%6!=5)return 0; for(int i=5;i*i<=n;i+=6) if(n%i==0||n%(i+2)==0)return 0; return 1; } void dfs(int d,int k) { if(k == 8) { if(ispri(d))c ++; return; } for(int i = 0;i <= 7;i ++) { if(!vis[i]) { vis[i] = 1; dfs(d * 10 + i,k + 1); vis[i] = 0; } } } int main() { for(int i = 1;i <= 7;i ++) { vis[i] = 1; dfs(i,1); vis[i] = 0; } cout<<c; }