因为本身楼主对于编程这方面很菜,所以请多多包容,谢谢。
//下面是正文
今天老师给我们留了做搜索题的任务,所以我就做了一道Superprime,这是原题:https://vijos.org/p/1359
这道题可以用搜索的思路来解决,我的搜索方案是枚举一位数,然后和一个若干位质数合并,判断是不是质数,只要是质数就用它继续向下枚举。
这是搜索方法:
void dfs(int x,int z){ int r; if(z==n){ cout<<x<<endl; return; } for(int i=1;i<=9;i++){ r=x*10+i; if(check(r)) dfs(r,z+1); } } 这里的z指的是现在的位数,x是枚举出来的一个质数,当现在的位数和要求的位数一样的时候,就输出一个合并的方法其实就是把质数乘上10,再加上一个枚举出来的一位数
check指的是判断质数的函数
下面是最菜版判断质数:
int check(int x){ int flag,i; flag=1; for(i=2;i*i<=x;i++) if(x%i==0){ flag=0; break; } return flag; } //源程序是这样的: #include<bits/stdc++.h> using namespace std; int n; int check(int x){ int flag,i; flag=1; for(i=2;i*i<=x;i++) if(x%i==0){ flag=0; break; } return flag; } void dfs(int x,int z){ int r; if(z==n){ cout<<x<<endl; return; } for(int i=1;i<=9;i++){ r=x*10+i; if(check(r)) dfs(r,z+1); } } int main(){ cin>>n; dfs(2,1); dfs(3,1); dfs(5,1); dfs(7,1); return 0; }