当前位置: 首页 > 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;
}

相关文章:

  • 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) 详解】
  • 网站开发公司经营范围/windows优化大师的作用
  • 网站色调代号/seo优化排名怎么做
  • 国际会议网站建设/班级优化大师官网登录
  • 美国做网站/mac923水蜜桃923色号
  • 网站建设app销售好做吗/拓客平台有哪些
  • 查询工具类网站制作/模板式自助建站