社区讨论
88分,求优化
P1217[USACO1.5] 回文质数 Prime Palindromes参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mdocwbt3
- 此快照首次捕获于
- 2025/07/29 17:50 7 个月前
- 此快照最后确认于
- 2025/11/04 03:31 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
bool huiwen(int a){
string s=to_string(a);
string s1=s;
reverse(s1.begin(),s1.end());
if(s==s1) return true;
else return false;
}
bool zhishu(int n){
if(n<=1) return false;
if(n==2) return true;
if(n%2==0||n%3==0) return false;
for (int i = 5; i * i <= n; i += 6) {
if (n % i == 0 || n % (i + 2) == 0) {
return false;
}
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++){
if(huiwen(i)){
if(zhishu(i)){
cout<<i<<endl;
}else{
continue;
}
}else{
continue;
}
}
return 0;
}
上面是我的代码
下面是deepseek的AC代码(亲证AC):
CPP#include <iostream>
#include <cmath>
using namespace std;
// 快速回文检查(数学方法)
inline bool is_pal(int num) {
if (num < 10) return true;
int n = num, rev = 0;
while (n > 0) {
rev = rev * 10 + n % 10;
n /= 10;
}
return num == rev;
}
// 极致优化的质数检查
inline bool is_prime(int num) {
if (num <= 1) return false;
if (num <= 3) return true;
if (num % 2 == 0 || num % 3 == 0) return false;
// 6k±1优化
for (int i = 5; i * i <= num; i += 6) {
if (num % i == 0 || num % (i + 2) == 0) {
return false;
}
}
return true;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a, b;
cin >> a >> b;
// 特殊处理小的回文质数
const int small_primes[] = {2, 3, 5, 7, 11};
for (int p : small_primes) {
if (a <= p && p <= b) {
cout << p << '\n';
}
}
// 主检查范围(只检查6k±1形式的数)
int start = max(a, 13);
if (start % 2 == 0) start++;
// 预计算平方根上限
int sqrt_b = sqrt(b) + 1;
for (int i = start; i <= b; i += 2) {
// 快速预筛:回文数首尾数字必须相同
if (i > 100) {
int last = i % 10;
int first = i;
while (first >= 10) first /= 10;
if (first != last) continue;
}
if (is_pal(i) && is_prime(i)) {
cout << i << '\n';
}
}
return 0;
}
因为deepseek的思路不是我的,所以想知道我的代码能不能优化到100分,求大佬康康,回复@我,必关~
题外话:打了好几次88分,还蛮吉利的咧
回复
共 5 条回复,欢迎继续交流。
正在加载回复...