zoukankan      html  css  js  c++  java
  • 【2050】特殊质数

    Time Limit: 1 second
    Memory Limit: 2 MB

    问题描述
    
    有一个有趣的现象,有些数字(例如:2333)是个质数,将末尾的数去掉后发现它仍然是质数,依此类推,一直到第一位仍是质数。现在给定n和m的值,求在这个范围内所有的这种特殊质数和总个数。 (由于1的特殊性,这种特殊质数不包括小于20的质数,对等于1的情况不单独处理)
    
        
     
    

    Input

    输入只有两行,第一行一个整数n,第二行一个整数m。其中n和m都在一般整数范围内,并>=20,且n<=m不一定成立

    Output

    输出有多行,每个符合条件的特殊质数占一行,按从小到大的顺序输出,最后一行是总个数。如果在该范围内没有符合条件的数,那么输出一个0,仅一行。

    Sample Input

    2223
    2334
    

    Sample Output

        2333(换行)
        1
    
    【题解】
    用一个bool型的函数,判断一下这个数字是否为质数,这个函数可以写成递归的形式,x为质数就再判断一下x/10是否为质数。最后出口是x== 0 ,即去掉所有的最后一位后都是质数。
    【代码】
    #include <cstdio>
    #include <cmath>
    
    int a,b,num = 0;
    
    void input_data()
    {
        scanf("%d",&a);
        scanf("%d",&b);
        if (a > b) //有说a 不一定小于b,则要判断一下
            {
                int t = a;a = b;b = t;
            }
    }
    
    bool can(int x) //判断x是否为特殊质数的递归写法
    {
        if (x == 0) return true; //如果x==0则为出口 返回true
        int m = sqrt(x); //获取根号x
        for (int i = 2;i <= m;i++) //判断这个数字是否为质数的方法
            if ((x % i) == 0)
                return false;
        return can(x / 10); //递归
    }
    
    void output_ans()
    {
        for (int i = a;i <= b;i++)
            if (can(i))
                {
                    num++;
                    printf("%d
    ",i);
                }
        printf("%d",num);
    }
    
    int main()
    {
        input_data();
        output_ans();
        return 0;
    }
    

  • 相关阅读:
    java中的CAS
    浅谈尾递归
    LeetCode 第 222 场周赛
    LeetCode 第 216 场周赛
    C++代码整洁之道
    LeetCode 第 211 场周赛
    LeetCode 每日一题 51.N 皇后
    LeetCode 第 201 场周赛
    LeetCode 第 32 场双周赛
    [转]演讲实录丨DevOps之十倍速原则
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632459.html
Copyright © 2011-2022 走看看