东华OJ-基础题-127-我素故我在(C++)

  • 问题描述
    有这样一种素数叫纯素数(YY出来的名字),当它是一个多位数的时候,你把它的末位去掉之后余下的数依然是一个素数。比如说2393,2393 本身是一个素数,它的末位去掉之后,余下的是239。239 是一个素数,它的末位去掉之后,余下的是23 。23是一个素数,它的末位去掉之后,余下的是2 。2依然还是一个素数。纯素数的长度叫做"维"。2393 是一个4维素数。3797也是一个4维素数。
  • 输入说明
    第一行先给出一共有多少组数据N(N<=1000),接下来有N组数据.

每组包括一个整数T(1<=T<=8)。

  • 输出说明
    按照从小到大的顺序输出所有的T维纯素数。
  • 输入范例
cpp 复制代码
3
8
1
4
  • 输出范例
cpp 复制代码
23399339
29399999
37337999
59393339
73939133
2
3
5
7
2333
2339
2393
2399
2939
3119
3137
3733
3739
3793
3797
5939
7193
7331
7333
7393

感想:1.写个函数用于判断是否是质数
2. 生成拼接纯素数,把1维、2维、3维...8维的纯素数都找到存放到各个vector里
3. 直接输出所需要的n维纯素数
By the way: 一开始用的暴力破解,一个一个累加去判断是否是纯素数,结果能输出来正确结果,但花费时间较长,OJ里TLE超时了,不得不优化算法,根据纯素数特征,找到关键是拼接出纯素数!!大大减少了时间复杂度哇。

代码如下:

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

vector<int> PurePrimes[9];

bool isPrime(int n) {
    if(n<2) return false;
    if(n==2) return true;
    if(n%2 == 0) return false;//偶数直接排除
    for(int i =3; i*i<=n; i+=2) {//只检查能否被奇数整除
        if(n%i == 0)
            return false;
    }
    return true;
}

void generatePurePrime() {
    PurePrimes[1] = {2,3,5,7};
    // 逐层构造2~8维纯素数
    //构造纯素数,在前一个维度的数字上直接后面加上1/3/7/9再判断是否是素数
    for( int dim = 2; dim<=8; ++dim) {
        for(size_t cur = 0; cur<PurePrimes[dim-1].size(); ++cur) {
            int current = PurePrimes[dim-1][cur],generated_num;
            for(int last = 1; last<=9; last+=2) { //下一位只能是1/3/7/9
                if(last == 5)
                    continue;
                generated_num = current*10+last;
                if(isPrime(generated_num))
                    PurePrimes[dim].push_back(generated_num);

            }
        }
    }
}


int main() {
    generatePurePrime();// 预生成所有维度的纯素数(只执行一次,提升查询效率)
    int N;
    cin >> N;
    int n;
    while(N--) {
        cin>>n;//n维 1~8
        for(auto num : PurePrimes[n]) {
            cout<<num<<endl;
        }
    }

    return 0;
}
相关推荐
电商API_180079052478 分钟前
速卖通商品采集API技术文章
java·开发语言·c++·api·跨境电商·商品详情
一晌小贪欢10 分钟前
Python办公14:批量解压文件夹内的所有 ZIP/RAR 并自动分类
开发语言·python·excel·数据可视化·python办公
郑州光合科技余经理12 分钟前
海外版外卖系统架构:订单怎么流转、权限怎么分
java·开发语言·前端·系统架构·uni-app·php·ai编程
Python 实战手记12 分钟前
企业微信主体变更公证书办理全解析:适用场景、材料规范、踩坑点与Python信息校验脚本
开发语言·python·企业微信
longxiaozhang614 分钟前
C#异常处理:程序出错了怎么办?
开发语言·数据库·c#
疯狂打码的少年18 分钟前
【数据结构】板块总结 + 下期预告(数据库技术)
数据结构·笔记·算法
郝学胜_神的一滴23 分钟前
Effective Python 条款 2:遵循 PEP 8 编码风格,写出高质量 Python 代码
python·算法
郝学胜-神的一滴24 分钟前
Effective Python 条款 1:确认你正在使用的 Python 版本
开发语言·数据结构·python·程序人生·算法
sel_932 分钟前
【多轮对话论文导读(二)】多轮对话与LLM Agent论文阅读:长期记忆、多轮评估与Agent训练
人工智能·深度学习·算法·语言模型·自然语言处理
一木 之林1 小时前
五、C++新特性、关键字与编译原理
java·jvm·算法