本蒟蒻的第三篇题解,望大家多多见谅!
P a r t Part Part 1 1 1 读题
求 11 11 11到 n n n之间(二者都包括),既是素数又是回文数的整数有多少个。
输入格式
一个大于等于 11 11 11小于等于 1000 1000 1000的整数 n n n。
输出格式
11 11 11到 n n n之间的素数回文数个数。
输入样例
23
输出样例
1
数据范围与提示
11
≤
N
≤
1000
11≤N≤1000
11≤N≤1000
P a r t Part Part 2 2 2 思路
根据题意,可以知道要求有两个:
1. 1. 1.这个数是否为素数
2. 2. 2.这个数是否为回文数
那么首先请大家回忆两个知识点:素数的判定和回文数的判定
素数的判定
知识点回顾:
bool is_prime(int x){
//从2开始(最小的素数是2),直到x的开方为止(避免重复)
//如果不能x能被i整除,返回值为1(true),否则返回值为0(false)
for(int i=2;i<=sqrt(x);i++)if(x%i==0)return false;
return true;
}
回文数的判定
知识点回顾:
方法1:翻转
bool is_palindrome(int x){
//m代表x进行运算(防止x的值出现问题,最后需要进行比较),y代表从后往前读数的大小(判断是否为回文数)
int m=x,y=0;
//循环执行两步,分别是
//y的运算(从后往前计算)
//对s的数位分离(帮助y进行每一位的计算)
while(m>0){
y=y*10+m%10;
m/=10;
}
//y如果与x的值(不用x做计算的原因在这里,需要进行比较)相同,返回值为1(true),否则返回值为0(false)
if(y==x)return true;
else return false;
}
方法2:数组
bool is_palindrome(int x){
//数组a用来存储每一位(后面会用其与原数进行比较),m计算位数,n代替x进行运算
int a[10],m=0;
while(x){
//循环执行两步:
//位数加1
//对n数位分离
m++;
a[m]=x%10;
x/=10
}
//a[m+1-i]指其在翻转之后对应的值
for(int i=1;i<=m/2;i++)if(a[i]!=a[m+1-i])return false;
else return true;
}
由此,我们知道了如何判定素数和回文数,可以编写代码啦!
小tip:大家可以先根据思路,写一下代码哦!
P a r t Part Part 3 3 3 代码
注意:回文数判定部分想用方法2(数组方法)的可自行上划复制哦!
方法1:无函数
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,s=0;
bool f1=0,f2=0;
cin>>n;
//循环,从11直到n结束
for(int i=11;i<=n;i++){
//质数判定,详情见上Part2
for(int j=2;j<=sqrt(n);j++){
if(i%j==0){
f1=false;
break;
}
f1=true;
}
int m=i,y=0;
while(m>0){
y=y*10+m%10;
m/=10;
}
if(y==i)f2=true;
else f2=false;
//判断二者是否均满足,若是增加个数
if(f1&&f2)s++;
}
cout<<s;
return 0;
}
方法2:有函数
#include<bits/stdc++.h>
using namespace std;
//质数判定,详情见上Part2
bool is_prime(int x){
for(int i=2;i<=sqrt(x);i++)if(x%i==0)return false;
return true;
}
//回文数判定,详情见上Part2
bool is_palindrome(int x){
int m=x,y=0;
while(m>0){
y=y*10+m%10;
m/=10;
}
if(y==x)return true;
else return false;
}
int main(){
int n,s=0;
cin>>n;
//循环,从11直到n结束
//判断二者是否均满足,若是增加个数
for(int i=11;i<=n;i++)if(is_prime(i)&&is_palindrome(i))s++;
cout<<s;
return 0;
}
P a r t Part Part 4 4 4 总结
本题考察如何判定素数和回文数,并用此作为判断条件,根据要求输出满足两个条件的数的个数
听完后,是不是觉得很简单呢?赶快自己去试一下吧!!!