当前位置: 首页 > news >正文

洛古B4158 [BCSP-X 2024 12 月小学高年级组] 质数补全(线性筛/dfs)

B4158 [BCSP-X 2024 12 月小学高年级组] 质数补全 - 洛谷

思路1:线性筛,字符串匹配,枚举

质数筛选

要解决这个问题,首先得找出指定范围内(这里是 1 到 10000000)的所有质数。常用的质数筛选算法有埃拉托斯特尼筛法(埃氏筛)和欧拉筛法(线性筛),本题建议采用的是欧拉筛法,其时间复杂度为 O(n),具体步骤如下:

  • 初始化一个布尔类型的数组 vis,用于标记每个数是否为质数。把 vis[0] 和 vis[1] 标记为非质数(因为 0 和 1 不是质数)。
  • 从 2 开始遍历到 10000000,对于每个数 i
    • 若 vis[i] 为 false,说明 i 是质数,将其存储到质数数组(第一段代码是 prime 数组,第二段代码是 primes 向量)中。
    • 遍历已找到的质数,将 i 与这些质数的乘积标记为非质数。若 i 能被当前质数整除,就停止内层循环,这能保证每个合数只被其最小质因数筛去一次,从而实现线性时间复杂度。

字符串匹配判断

在找出所有质数后,需要判断输入的带有 * 通配符的字符串是否能与某个质数匹配。可以定义一个判断函数具体步骤如下:

  • 首先检查两个字符串的长度是否相同,若不同则直接返回 false
  • 接着遍历两个字符串的每个字符:
    • 若对应位置的字符相同,继续检查下一个字符。
    • 若输入字符串中对应位置的字符是 *,表示该位置可以匹配任意字符,继续检查下一个字符。
    • 若对应位置的字符既不相同,输入字符串中对应位置的字符也不是 *,则返回 false
  • 若遍历完所有字符都没有返回 false,则返回 true

代码:
 

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool vis[10000005];
int n;
vector<int> primes;

void euler(){
    vis[0]=vis[1]=true;
    for(int i=2;i<=10000000;++i){
        if(!vis[i])primes.push_back(i);
        for(int j=0;j<primes.size()&&i*primes[j]<=10000000;++j){
            vis[i*primes[j]]=true;
            if(i%primes[j] == 0) break;
        }
    }
}

bool check(string a,string b){
    if(a.size()!=b.size())return false;
    for(int i=0;i<a.size();++i){
        if(a[i]!=b[i]&&b[i]!='*')return false;
    }
    return true;
}

int main(){
    int n;
    cin>>n;
    euler();
    while(n--){
        string s;
        cin>>s;
        bool flag = false;
        for(auto i:primes){
            if(check(to_string(i),s)){
                cout<<i<<endl;
                flag = true;
                break;
            }
        }
        if (!flag) cout<<"-1"<<endl;
    }
    return 0;
}

http://www.dtcms.com/a/125690.html

相关文章:

  • Jetson AGX Xavier开发套件使用方法
  • HCIE无线控制器配置常见问题及解决方法
  • 【C语言】--- 文件操作
  • IPD推进中关键角色与岗位(八)LPMT优化产品全生命周期管理,帮助企业在竞争
  • 基于 JavaWeb 的 SSM 在线视频教育系统设计和实现(源码+文档+部署讲解)
  • P10899 [蓝桥杯 2024 省 C] 劲舞团
  • 文件IO7(中文字库的原理与应用/目录检索原理与应用/并发编程的原理与应用)
  • Windows系统备份和还原点
  • 第十五届蓝桥杯PythonC组题解
  • 如何使用通义灵码完成PHP单元测试 - AI辅助开发教程
  • 数字内容体验案例解析与行业应用
  • 神经动力学系统与计算及AI拓展
  • MySQL的数据库性能分析利器Percona toolkit
  • 利用Ruby的Typhoeus编写爬虫程序
  • 快速上手Linux联网管理
  • 【Ansible自动化运维】四、ansible应用部署:加速开发到生产的流程
  • 接口和抽象类的区别
  • maven 依赖的优先级
  • 一个批量文件Dos2Unix程序(Microsoft Store,开源)
  • 【 Beautiful Soup (bs4) 详解】
  • 五、用例篇
  • 【二轮征稿】2025年IEEE第三届模式识别、机器视觉与人工智能国际会议(IEEE PRMVAI 2025)
  • 订阅不到topic排查方式
  • 上下文管理器需要实现哪两种方法以及相关应用
  • 进行性核上性麻痹患者,饮食 “稳” 健康
  • 消融实验_草稿
  • 使用setTimeout模拟setInterval
  • 山东省第二人民医院:基于DeepSeek的医疗AI智慧安全运营应用
  • 河北工程大学e2e平台,python
  • 使用Python写入JSON、XML和YAML数据到Excel文件