社区讨论

发现了一个神奇的现象,求大佬解惑

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 条回复,欢迎继续交流。

正在加载回复...