洛谷P1217-回文质数 Prime Palindromes
这个题目我做出来了但是超时了,时间复杂度有点高,主要是因为我用了大量的循环, 所以我这个是比较暴力的解法,下面我分析我的暴力代码
首先是判断回文数的函数
- 第一步将标识传入参数是不是回文数的flag先默认为true
- 然后初始化一个栈一个队列,用到栈先进后出和队列先进先出的特点
- 将传入的每一位数入栈并且入队列
- 每位数都入栈和入队列之后,再让所有位一位一位出队列和出栈,一位一位对比,只要有某一位不相等就将flag=flase
- 最后返回flag\
然后是判断质数,众所周知素数是只有1和它自身以外的数都不能整除的数
- 还是默认flag = true
- 用传入的参数mod2到x-1的数只要有能整除的数就令flag=false
- 下面就遍历判断就行了
#include <iostream>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
bool huiwen(int x)
{
int flag = true;//默认是回文数
stack<int> s1;
queue<int> q1;
int temp = x;
while(temp!=0)
{
int t = temp%10;
s1.push(t);
q1.push(t);
temp/=10;
}
while(!s1.empty())
{
int a1 = s1.top();
s1.pop();
int a2 = q1.front();
q1.pop();
if(a1!=a2)
flag = false;
}
return flag;
}
bool zhishu(int x)
{
bool flag = true;//默认是质数
for(int i = 2;i<x;i++)
{
if(x%i==0)//除了1和本身外可以整除的就不是质数
flag = false;
}
return flag;
}
int main() {
int x1,x2;
cin>>x1>>x2;
for(int i = x1;i<=x2;i++)
{
if(huiwen(i)&&zhishu(i))
cout<<i<<endl;
}
return 0;
}