回文串专题
典题合集
构造区间[1,n]回文数
时间复杂度:O(nlogn)
vector<long long> huiwen;
auto init=[]{
for(int i=1;i<=100000;i++){//构造[1,1e9+x]内的回文数
long long tmp=i,x=i;
while(tmp){//偶数长度
x*=10;
x=x+tmp%10;
tmp/=10;
}
huiwen.push_back(x);
tmp=i/10,x=i;
while(tmp){//奇数长度
x*=10;
x=x+tmp%10;
tmp/=10;
}
huiwen.push_back(x);
}
sort(huiwen.begin(),huiwen.end());
return 0;
}();
构造区间[l,r]回文素数
所有偶数位的回文数都是11的倍数
时间复杂度:O(nsqrt(n))
int is_prime(int x) {
if (x == 1) return 0;
if (x == 2) return 1;
for (int i = 2; i * i <= x; i++) {
if (x % i == 0) return 0;
}
return 1;
}
vector<int> init(int a, int b) {
vector<int> ans;
for (int i = 1; i <= 100000; i ++) {
if (i == 9 && a <= 11 && b >= 11) ans.push_back(11);
int tmp = i / 10, x = i;
while (tmp > 0) {
x *= 10;
x = x + tmp % 10;
tmp /= 10;
}
if (x > b) break;
if (x >= a && is_prime(x)) ans.push_back(x);
}
return ans;
}