• USACO 1.5-Superprime Rib


    /*
    ID: m1590291
    TASK: sprime
    LANG: C++
    */
    #include <iostream>
    #include <fstream>
    using namespace std;
    /******************************************************************************************************************
                        第一次感到 DFS 是如此的好用和方便
                        思路: (从数学的角度)
                        1.首位只能是质数2 3 5 7
                        2.其余位只能是1,3,7,9
                        3.若n=1,直接输出2,3,5 7
                        4. DFS 不需要预处理。 直接DFS 1~9,加入当前数末尾,并判断是不是素数,
                                是则递归处理下一位数,不是则回溯,直到depth>n。不会超时。
    
    ******************************************************************************************************************/
    ifstream fin("sprime.in");
    ofstream fout("sprime.out");
    
    int N;
    int fuc(int x)
    {
        for(int i = 2;i*i <= x;i ++)
            if(x%i == 0)    return 0;
        return 1;
    }
    void dfs(int x,int num)
    {
        if(!fuc(x)) return ;        //不是质数,进行回溯
        if(num == N)    fout<<x<<endl;      //边界条件,长度 num == N;
        else{
            for(int i = 1;i <=9;i +=2)
                dfs(x*10+i,num+1);
        }
    }
    int main()
    {
        while(fin>>N)
        {
            int a[4]={2,3,5,7};
            for(int i = 0;i < 4;i ++){
                dfs(a[i],1);
            }
        }
        return 0;
    }
    


  • 相关阅读:
    Java上等价类划分测试的实现
    软件测试の因果图法的测试运用
    display: block; 和 display: inline; 的区别
    CSS实现垂直居中
    CSS中实现水平居中
    HTTP头部信息
    HTTP PUT方法和POST方法的区别
    理解 ajax xhr jsonp
    深入理解JavaScript系列
    Angular 1.x 指令笔记
  • 原文地址:https://www.cnblogs.com/Jstyle-continue/p/6352028.html
Copyright © 2020-2023  润新知