思路:将数位一位一位加,一旦发现不是质数就跳过,否则继续递归下一位
例子:
5->51(跳过);
5->53(可以);
5->57(跳过);
5->59(可以)。
就是↓
int x = m * 10 + 1;
if (pd(x)) dfs (t + 1, x);
x = m * 10 + 3;
if (pd(x)) dfs (t + 1, x);
x = m * 10 + 7;
if (pd(x)) dfs (t + 1, x);
x = m * 10 + 9;
if (pd(x)) dfs (t + 1, x);
得出的规律:在开头只能添加1,2,3,5,7四个数;在中间及末尾只能添加1,3,7,9四个数
dfs (2, 2);
dfs (2, 3);
dfs (2, 5);
dfs (2, 7);
如果在中间添加5则会变成5的倍数
代码:
#include <bits/stdc++.h>
using namespace std;
int n;
bool pd (int t) { //判断质数
if (t == 2) return true;
if (t % 2 == 0) return false;
for (int i = 3; i * i <= t; i++) {
if