目录
题目
蒜头君在数学课上学习了素数,在信息课上学习了回文数,她现在很想知道,对于区间 [L,R] ,其中有多少个数既是素数又是回文数
输入格式
第一行两个整数分别表示 L,R
输出格式
一个整数表示有多少个数满足条件
数据范围
对于 20% 的数据,L=R
对于 50% 的数据,L≤R≤10³
对于 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;
}