专栏文章

题解:P1217 [USACO1.5] 回文质数 Prime Palindromes

P1217题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mip18ke3
此快照首次捕获于
2025/12/03 04:30
3 个月前
此快照最后确认于
2025/12/03 04:30
3 个月前
查看原文

P1217 题解:

主要思路:

  • 循环判断区间 [a,b][a,b] 中的回文质数。
注:\color{red} 注: 因为 11100000000100000000 中的回文质数只到 99898999989899,所以如果 b9999999b\ge 9999999,要将 bb 设为 99999999999999 来优化。
  • 因为回文数数量少于质数,所以优先判断回文,再判断质数。

代码实现:

  • 输入 a,ba,b 的值。
  • 定义判断质数的函数 primeprime 判断质数。
  • 用字符串 reversereverse 函数判断回文数。
  • 循环判断并输出结果。
判断质数和回文数的代码应该都会吧。。。
AC code:
CPP
#include <bits/stdc++.h>
using namespace std;
int a,b;
bool prime(int n){
	for(int i=2;i<=sqrt(n);i++){
		if(n%i==0){
			return false;
		}
	}
	return true;
}//质数判断
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>a>>b;
	if(a==2){
		cout<<2<<endl;
	}//特判
	if(a%2==0){
		a++;
	}//偶数不可能为质数
	b=min(9999999,b);//修改 b 的值
	for(int i=a;i<=b;i+=2){
        //判断回文数
        string s,t;
		s=to_string(i);
		t=s;
		reverse(s.begin(),s.end());
		if(t==s){
			if(prime(i)){
				cout<<i<<endl;
			}
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...