[求问] 为什么一条判断可以减少 300 ms的时间
查看原帖
[求问] 为什么一条判断可以减少 300 ms的时间
1070026
yuhong056楼主2025/6/26 13:37

原来的代码:

#include<bits/stdc++.h>

using namespace std;

bool is_prime(int s) {
	for(int i = 2; i * i <= s; i++) {
		if(s % i == 0)return 0;
	}
	return 1;
}
bool is_hw(int a) {
	int b = 0, s = a;
	while(s != 0) {
		b = b * 10 + s % 10;
		s /= 10;
	}
	return a == b;
}
int main() {
	int a, b;
	cin >> a >> b;
	for(int i = a; i <= b; i++) {
		if(is_hw(i) && is_prime(i))cout << i << '\n';
	}
}

使用各种卡常技巧还是过不了,多几 ms。记录

但是如果在判断回文数时特判个位数,变成这样:

#include<bits/stdc++.h>

using namespace std;

bool is_prime(int s) {
	for(int i = 2; i * i <= s; i++) {
		if(s % i == 0)return 0;
	}
	return 1;
}
bool is_hw(int s) {
	if(s < 10)return 1;
	int b = 0, t = s;
	while(s) {
		b = b * 10 + s % 10;
		s /= 10;
	}
	return t == b;
}
int main() {
	int a, b;
	cin >> a >> b;
	for(int i = a; i <= b; i++) {
		if(is_hw(i) && is_prime(i))cout << i << '\n';
	}
}

就能减少约 300 ms 的运行时间。记录

请问这是为什么?

2025/6/26 13:37
加载中...