当前位置 博文首页 > Keven_11的博客:C++题解:蒜头君爱数数

    Keven_11的博客:C++题解:蒜头君爱数数

    作者:[db:作者] 时间:2021-08-18 15:50

    ???目录

    题目?

    题解


    题目?

    蒜头君在数学课上学习了素数,在信息课上学习了回文数,她现在很想知道,对于区间?[L,R]?,其中有多少个数既是素数又是回文数

    输入格式

    第一行两个整数分别表示?L,R

    输出格式

    一个整数表示有多少个数满足条件

    数据范围

    对于?20%?的数据,L=R

    对于?50%?的数据,L≤R≤103

    对于?100%?的数据,L≤R≤10?

    输出时每行末尾的多余空格,不影响答案正确性

    要求使用「文件输入输出」的方式解题,输入文件为?count.in,输出文件为?count.out

    样例输入复制

    7 11

    样例输出复制

    2

    题解:

    知识点:枚举

    分析:题目比较简单,最普通的枚举。先判断此数是否是回文串再判断是否是质数时间复杂度更低一些,因为质数常有而回文数不常有【引经据典,哈】

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define _for(i,a,b) for (int i=(a);i<=(b);i++)//更方便
    using namespace std;
    int reverse(int x){//返回其回文串
        int ans=0;//注意初始化
        while (x){
            ans=ans*10+x%10;
            x/=10;
        }
        return ans;
    }
    bool is_prime(int a){//判断是否属质数
        int m=sqrt(a);
        for (int i=2;i<=m;i++){
            if (a%i==0){
                return false;
            }
        }
        return true;
    }
    int main(){
        freopen("count.in","r",stdin);
        freopen("count.out","w",stdout);
        int l,r,ans=0;
        scanf("%d%d",&l,&r);
        _for(i,l,r){
            if (reverse(i)==i && is_prime(i)){//判断
                ans++;
            }
        }
        printf("%d\n",ans);
        return 0;
    }

    cs
    下一篇:没有了