原题链接
P1218
题目类型:
普
及
−
{\color{orange} 普及-}
普及−
题目大意
输入
n
n
n,求出所有的
n
n
n位数,使得这些
n
n
n位数每一个数从第
1
1
1位到第
i
(
1
≤
i
≤
n
)
i(1\le i\le n)
i(1≤i≤n)位组成的数都是质数。
例如对于四位目标数之一的2333
,那么2
,23
,233
,2333
都是质数。
S
a
m
p
l
e
\mathbf{Sample}
Sample
I
n
p
u
t
\mathbf{Input}
Input
4
S a m p l e \mathbf{Sample} Sample O u t p u t \mathbf{Output} Output
2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393
解题思路
用 d f s dfs dfs,遍历每一位,如果说当前数字接上 0 ∼ 9 0\sim 9 0∼9任意一个数是质数的话就继续递归,注意第一位不能是 0 0 0。
上代码
#include<iostream>
#include<cmath>
using namespace std;
int n;
bool exist(int x)
{
if(x==1) return false;
for(int i=2; i<=sqrt(x); i++)
if(x%i==0) return false;
return true;
}
void dfs(int k,int num)
{
if(k==n+1)
{
cout<<num<<endl;
return;
}
for(int i=0; i<=9; i++)
{
if(k==1&&i==0) continue;
if(exist(num*10+i)) dfs(k+1,num*10+i);
}
}
int main()
{
cin>>n;
dfs(1,0);
return 0;
}
完美切题 ∼ \sim ∼