首页 > 其他分享 >回文质数(快速求出一个区间内的所有回文数)

回文质数(快速求出一个区间内的所有回文数)

时间:2023-06-20 23:11:28浏览次数:42  
标签:palindromes end int 质数 start 区间 回文

题目链接:回文质数

code:

#include <bits/stdc++.h>

using namespace std;

vector<int> constructPalindromes(int start, int end) {
  vector<int> palindromes;

  if (start <= 1) {
    palindromes.push_back(1);
    start = 2;
  }

  int startLen = to_string(start).length();
  int endLen = to_string(end).length();

  for (int len = startLen; len <= endLen; ++len) {
    if (len % 2 == 0) {
      int halfLen = len / 2;
      int startHalf = pow(10, halfLen - 1);
      int endHalf = pow(10, halfLen) - 1;

      for (int i = startHalf; i <= endHalf; ++i) {
        string numStr = to_string(i);
        string reversed(numStr.rbegin(), numStr.rend());
        int palindrome = stoi(numStr + reversed);
        if (palindrome >= start && palindrome <= end) {
          palindromes.push_back(palindrome);
        }
      }
    } else {
      if (len == 1) {
        for (int i = start; i <= min(end, 9); ++i) {
          palindromes.push_back(i);
        }
      } else {
        int halfLen = len / 2;
        int startHalf = pow(10, halfLen - 1);
        int endHalf = pow(10, halfLen) - 1;

        for (int i = startHalf; i <= endHalf; ++i) {
          for (int mid = 0; mid <= 9; ++mid) {
            string numStr = to_string(i);
            string reversed(numStr.rbegin(), numStr.rend());
            int palindrome = stoi(numStr + to_string(mid) + reversed);
            if (palindrome >= start && palindrome <= end) {
              palindromes.push_back(palindrome);
            }
          }
        }
      }
    }
  }

  return palindromes;
}
int main() {
  int start, end;
  cin >> start >> end;
  vector<int> palindromes = std::move(constructPalindromes(start, end));
  sort(palindromes.begin(), palindromes.end());

  auto isPrime = [](int x) ->bool {
    int bound = sqrt(x);
    for (int i = 2; i <= bound; i++) {
      if (x % i == 0) {
        return false;
      }
    }
    return true;
  };
  for (int palindrome : palindromes) {
    if (isPrime(palindrome)) {
      printf("%d\n", palindrome);
    }
  }
}

标签:palindromes,end,int,质数,start,区间,回文
From: https://www.cnblogs.com/hacker-dvd/p/17495117.html

相关文章

  • 区间选点问题
    题目描述数轴上有\(n\)开区间\((a_i,b_i)\),请选择尽量多的区间,使其两两不相交。(开区间意味着,左右两个端点是不包含的)输入格式第一行\(n(n\le1000000)\),之后\(n\)行,每行两个数分别为\(ai,bi\),输出格式最少需要的点的个数样例样例输入13132435样例输出11数据范......
  • 选择不相交区间
    题目描述数轴上有\(n\)开区间\((a_i,b_i)\),请选择尽量多的区间,使其两两不相交。(开区间意味着,左右两个端点是不包含的)输入格式第一行\(n\)之后\(n\)行,每行两个数分别为\(a_i,b_i\)输出格式最多能选择的区间个数样例样例输入13132435样例输出12数据范围对于\(2......
  • 树状数组详解!(C++_单点/区间查询_单点/区间修改)
    先把这张著名的树状数组结构图摆在最前面,接下来我们就以这张图讲起!       首先图中的A数组就是所谓的原数组,也就是普通的数组形态,C则是我们今天要说的树状数组(可以看出一个树的形状,但其实和树没多大关系)从图中可以明显看到以下几个式子:有点像前缀和不是?但这样还看不出什......
  • CCF_201612-4 压缩编码(C++_区间DP)
    问题描述       给定一段文字,已知单词a1,a2,…,an出现的频率分别t1,t2,…,tn。可以用01串给这些单词编码,即将每个单词与一个01串对应,使得任何一个单词的编码(对应的01串)不是另一个单词编码的前缀,这种编码称为前缀码。使用前缀码编码一段文字是指将这段文字中的每......
  • 回文函数
    回文函数,学习到了strlen()函数在获取数组时是从str[1]开始计算的,要想从str[1]开始需要-1;#include<stdio.h>#include<string.h>intmain(){inti,j,n;charstr[80];//存储字符串printf("请输入字符串:\n");gets(str);//从输入读取字符串,并赋值给数组strn=strlen(str);fo......
  • 2023.6.16 构建回文串检测
    注意关键性质,可以重排。所以我们可以只考虑一种情况,其他情况都可以重排到这种情况。考虑在区间内:所有字符都有偶数个,此时不需要改变任何字符,我们可以把字符重排成回文的。只有一种字符有奇数个,其他字符都是偶数个。此时可以拿出这种字符的一个放在最中间。然后又回归到情况1,......
  • 力扣---1177. 构建回文串检测
    给你一个字符串 s,请你对 s 的子串进行检测。每次检测,待检子串都可以表示为 queries[i]=[left,right,k]。我们可以重新排列子串 s[left],...,s[right],并从中选择最多k 项替换成任何小写英文字母。 如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结......
  • 1177. 构建回文串检测
    给你一个字符串 s,请你对 s 的子串进行检测。每次检测,待检子串都可以表示为 queries[i]=[left,right,k]。我们可以重新排列子串 s[left],...,s[right],并从中选择最多k 项替换成任何小写英文字母。如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果......
  • 每日一道leetcode:9. 回文数
    1.题目(简单)题目链接给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。示例1:输入:x=121输出:true示例2:输入:x=-121输出:false解释:从左向右读,为-121。从右向左读,为121......
  • 算法题总结-最长回文序列
    原题https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1?tpId=37&tqId=21255&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fdifficulty%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&am......