社区讨论
发现了一个神奇的现象,求大佬解惑
P1217[USACO1.5] 回文质数 Prime Palindromes参与者 4已保存回复 18
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 18 条
- 当前快照
- 1 份
- 快照标识符
- @m4cub2vp
- 此快照首次捕获于
- 2024/12/06 22:27 去年
- 此快照最后确认于
- 2025/11/04 23:23 4 个月前
这段代码用devc++,用vs测试都是正常能出正确答案的,但是放洛谷就显示编译失败四个字没有任何说明,
我开始以为是英文名导致命名冲突了,然后在每个函数名后面加了下划线,把所有英文名变量换成了一个字母发现还是编译失败,我已经不知所措了
CPP#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
bool f[100000000] = { 1,1 };
int sum;
//质数筛
void Prime_() {
for (unsigned long long i = 2; i < 100000000; i++) {
if (f[i] == false) {
for (unsigned long long j = i * i; j < 100000000; j += i) {
f[j] = true;
}
}
}
return;
}
//求出位数
int Digit_(int n) {
int cnt = 0;
while (n) {
n /= 10;
cnt++;
}
return cnt;
}
//用来构造回文数,判断是否为质数,并输出,x为位数,y为递归的层数
void Function_(int& l, int& r, int x, int y) {
if (x == 1) {//当只有一位数的情况,只有5,7满足
for (int i = 5; i <= 7; i += 2) {
if (i >= l && i <= r)
cout << i << endl;
}
return;
}
else if (x == 2) {//当位数为2时只有11满足
if (11 >= l && 11 <= r)
cout << 11 << endl;
return;
}
else if ((x & 1)== 0)//除了2,当位数为偶数时都不满足回文质数
return;
else {
if (y > (x / 2) + 1) {//递归构造回文数
if (f[sum] == false && sum <= r && sum >= l)
cout << sum << endl;
return;
}
else {
int t = (x / 2) + 1;
for (int i = 0; i <= 9; i++) {
if (i == 0 && y == 1)//首位数字不能为0
continue;
else {
if (y != t)//中间的数不需要加两次
sum += int(pow(10, t - y + 1) * i + pow(10, y - 1) * i);
else
sum +=int( pow(10, t - y + 1) * i);
Function_(l, r, x, y + 1);
if (y != t)
sum -= int(pow(10, t - y + 1) * i + pow(10, y - 1) * i);
else
sum -= int(pow(10, t - y + 1) * i);
}
}
}
}
return;
}
int main() {
int l, r, d1, d2;
Prime_();
cin >> l >> r;
d1 = Digit_(l);//判断两端的位数
d2 = Digit_(r);
for (int i = d1; i <= d2; i++)//遍历能取到的所有位数
Function_(l, r, i, 1);
return 0;
}
回复
共 18 条回复,欢迎继续交流。
正在加载回复...