#include<bits/stdc++.h>
#define int long long
using namespace std;
bool vis[10];
int tot;
void dfs(int now,register int sum,int maxn)
{
if(now>maxn)
{
int num=sqrt(sum);
if(sum==1||sum==4)return;
if(sum==2||sum==3)
{
v[++tot]=sum;
return;
}
if(sum%6!=1&&sum%6!=5)return;
for(int i=5;i<=num;i+=6)if(sum%i==0||sum%(i+2)==0)return;
++tot;
return;
}
for(int i=0;i<10;i++)
if(!vis[i])
{
if(now==1&&i==0)continue;
vis[i]=1;
dfs(now+1,sum*10+i,maxn);
vis[i]=0;
}
}
signed main()
{
// freopen("test.out","w",stdout);
for(int i=1;i<10;i++)dfs(1,0,i);
// cout<<tot<<endl;
}
这份代码跑了2s
但是如果去掉 dfs 中的 ++tot 就只跑了80ms
实测 ++tot 会被执行 283086 次
为什么不到 1e6 次加法会导致慢这么多?