用 0,1,2,3⋯70,1,2,3 \cdots 70,1,2,3⋯7 这 888 个数组成的所有整数中,质数有多少个(每个数字必须用到且只能用一次)。
提示:以 000 开始的数字是非法数字。
思路:用
全排列函数
next_permutation, 第一个数为0的情况特别考虑一下就可以了,具体代码如下:
#include <bits/stdc++.h>
using namespace std;
bool isprime(int n) {
if(n == 1)
return false;
else
for(int i = 2; i < sqrt(n); i++) {
if(n % i == 0)
return false;
}
return true;
}
int main() {
int a[8];
int cnt = 0;
long long t = 0;
for(int i = 0; i < 8; i++) a[i] = i;
do {
t = a[0];
if(t == 0) continue;
for(int i = 1; i < 8; i++) {
t = t * 10 + a[i];
}
if(isprime(t)) cnt++;
}while(next_permutation(a,a+8));
cout<<cnt<<endl;
return 0;
}