Vijos1359

    xiaoxiao2021-03-25  134

    因为本身楼主对于编程这方面很菜,所以请多多包容,谢谢。

    //下面是正文

    今天老师给我们留了做搜索题的任务,所以我就做了一道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; }

    转载请注明原文地址: https://ju.6miu.com/read-2813.html

    最新回复(0)