0,1,2,3⋯70,1,2,3 \cdots 70,1,2,37 这 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;
}