CSP-202312-2-因子化简(质数筛法)

CSP-202312-2-因子化简

一、质数筛法

主流的质数筛法包括埃拉托斯特尼筛法(Sieve of Eratosthenes)、欧拉筛法(Sieve of Euler)、线性筛法(Linear Sieve)等。这些算法都用于高效地生成一定范围内的质数。

1. 埃拉托斯特尼筛法(Sieve of Eratosthenes):

  • 从2开始,将2的倍数标记为合数,然后找到下一个未被标记的数,将其倍数标记为合数,重复这个过程,直到达到预定范围。
  • 在每次标记过程中,未被标记的数即为质数。
const int MAX_SIZE = 1001;
int primes[MAX_SIZE];  // 存储素数的数组void generatePrimes() {bool isPrime[MAX_SIZE];  // 标记是否为素数for (int i = 2; i < MAX_SIZE; i++) {isPrime[i] = true;  // 假设所有数字都是素数}// 从2开始,将2的倍数标记为合数for (int i = 2; i * i < MAX_SIZE; i++) {if (isPrime[i]) {// 将 i 的倍数标记为非素数for (int j = i * i; j < MAX_SIZE; j += i) {isPrime[j] = false;}}}int count = 0;  // 用于记录素数的个数for (int i = 2; i < MAX_SIZE; i++) {if (isPrime[i]) {// 将素数存储在全局数组 primes 中primes[count] = i;count++;}}
}

2. 欧拉筛法(Sieve of Euler):

  • 欧拉筛法是对埃拉托斯特尼筛法的改进,主要解决了合数被重复标记的问题。
  • 对于每个数,只用最小质因子去标记,避免了重复标记。
  • 通过对每个合数只标记一次,提高了效率。

3. 线性筛法(Linear Sieve):

  • 线性筛法是对欧拉筛法的进一步改进,更加高效。
  • 在筛质数的同时,顺便筛掉合数,每个合数都被最小质因子筛去。
  • 使用一个额外的数组保存最小质因子,同时记录每个数的质因子个数。
  • 线性筛法在遍历过程中只会被筛掉一次,避免了重复筛掉合数的问题。

二、解题思路

【核心思想】: 对输入的整数进行质因数分解,并保留出现次数不小于阈值 k 的素数部分,最后输出结果。
【注意】: 本题需要先通过质数筛法打印找出1000以内的质数,然后将其存为数组,直接调用generatePrimes()可能会时间超限

  1. 素数数组定义: int primes[] = { 2, 3, 5, ... , 991, 997 };,在数组中存储了一系列素数,用于后续的整数分解。

  2. 程序解释:

    • 内层 for 循环遍历素数数组,对输入的整数 n 进行素数分解。
    • 内部的 while 循环统计每个素数的出现次数,如果次数不小于阈值 k,则将该素数的k次幂乘入最终结果 ans 中。
#include<iostream>
using namespace std;int primes[] = { 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 507, 521, 523, 541, 547, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997 };  // 存储素数的数组int main() {int q; cin >> q;  while (q--) {long long n, k, ans = 1;  cin >> n >> k;  for (int i = 0; n > 1 && i < sizeof(primes) / sizeof(primes[0]); i++) {int curK = 0; // curK记录当前素数的出现次数// 统计每个素数对应的Kwhile (n % primes[i] == 0) {curK++;n /= primes[i];}// 不小于阈值的部分保留if (curK >= k) {for (int j = 0; j < curK; j++) {ans *= primes[i];}}}cout << ans << endl;  // 输出结果}return 0;
}

请添加图片描述

参考:CCFCSP202312-2因子化简 (质数筛法)C/C++ 满分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/679765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式-观察者模式 Observer

观察者模式 一、概述二、使用场景三、发布订阅1) 观察者模式2) 发布-订阅模式 四、源码使用1) jdk中的观察者2) Guava中的消息总线 五、进阶1) 异步非阻塞模型 一、概述 观察者模式是一种行为设计模式&#xff0c;允许对象间存在一对多的依赖关系&#xff0c;当一个对象的状态…

二叉搜索树题目:二叉搜索树的最小绝对差

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉搜索树的最小绝对差 出处&#xff1a;530. 二叉搜索树的最小绝对差 难度 3 级 题目描述 要求 给定一个二叉…

C#入门及进阶|数组和集合(四):数组的参数传递

数组的参数传递 向方法传递参数有两个方法&#xff0c;一个是“传值”&#xff0c;另一个是“传引用”。 传值时&#xff0c;如果对被调用的方法的值的副本进行修改&#xff0c;不会影响原始变量的值。 1.值传递 通过“传值”方式来传递引用&#xff0c;相当于允许方法直接访问…

什么是Java中的微服务架构,你能列举一些微服务架构的优缺点吗?

什么是Java中的微服务架构&#xff0c;你能列举一些微服务架构的优缺点吗&#xff1f; 微服务架构是一种将单个应用程序拆分为多个小型服务的架构风格&#xff0c;每个服务都运行在自己的进程中&#xff0c;并通过轻量级的通信机制&#xff08;通常是HTTP或者消息队列&#xf…

【DSP】数字信号处理发展里程碑(AI【文心一言】 辅助生成)

在远离尘嚣的学术殿堂中&#xff0c;数字信号处理&#xff08;DSP&#xff09;这一学科犹如一颗璀璨的明珠&#xff0c;其发展历程充满了传奇色彩。下面&#xff0c;就让我们一起穿越时空&#xff0c;回到那些激动人心的时刻&#xff0c;见证数字信号处理从无到有、从弱到强的壮…

java对象内部都有哪些东西

普通对象 对象头 markword 占8字节ClassPointer 指针 :-XX userCompressedClassPointrs 为4字节&#xff0c;不开启为 8字节实例数据 引用类型: -XX userCommpressedOops 为4字节&#xff0c;不开启8字节Padding对齐&#xff0c; 8的倍数 数组对象 对象头&#xff1a;markwor…

算法沉淀——位运算(leetcode真题剖析)

算法沉淀——位运算 常用位运算总结1.基础位运算2.确定一个数中第x位是0还是13.将一个数的第x位改成14.将一个数的第x位改成05.位图6.提取一个数最右边的17.删掉一个数最右边的18.异或运算9.基础例题 力扣题目讲解01.面试题 01.01. 判定字符是否唯一02.丢失的数字03.两整数之和…

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换

【北邮鲁鹏老师计算机视觉课程笔记】05 Hough 霍夫变换 1 投票策略 考虑到外点率太高 ①让直线上的每一点投票 ②希望噪声点不要给具体的任何模型投票&#xff0c;即噪声点不会有一致性的答案 ③即使被遮挡了&#xff0c;也能把直线找出来 参数空间离散化 直线相当于就是m,b两…

Python 3 中使用 pandas 和 Jupyter Notebook 进行数据分析和可视化

简介 Python 的 pandas 包用于数据操作和分析&#xff0c;旨在让您以直观的方式处理带标签或关联数据。 pandas 包提供了电子表格功能&#xff0c;但由于您正在使用 Python&#xff0c;因此它比传统的图形电子表格程序要快得多且更高效。 在本教程中&#xff0c;我们将介绍如…

git revert回退某次提交

请直接看原文: 【git revert】使用以及理解&#xff08;详解&#xff09;_git revert用法-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 试验得知:用Reset HEAD方…

mmap函数的详细讲解

mmap&#xff08;&#xff09;函数是一个用于在用户空间和内核空间之间进行文件映射的系统调用。它允许文件在物理内存中的特定区域被映射到进程的地址空间中&#xff0c;从而允许进程通过内存访问操作来读取和写入文件。 函数原型&#xff1a; #include <sys/mman.h> …

笔记---dp---最长上升子序列模型

模型原始题目&#xff1a;AcWing.895.最长上升子序列 题目关系如下&#xff1a; 转化一 AcWing.1017.怪盗基德的滑翔翼 怪盗基德是一个充满传奇色彩的怪盗&#xff0c;专门以珠宝为目标的超级盗窃犯。 而他最为突出的地方&#xff0c;就是他每次都能逃脱中村警部的重重围堵…

ZigBee学习——在官方例程实现组网

✨Z-Stack版本&#xff1a;3.0.2 ✨IAR版本&#xff1a;10.10.1 ✨这篇博客是在善学坊BDB组网实验的基础上进行完善&#xff0c;并指出实现的过程中会出现的各种各样的问题&#xff01; 善学坊教程地址&#xff1a; ZigBee3.0 BDB组网实验 文章目录 一、基础工程选择二、可能遇…

Linux(Ubuntu) 环境搭建:MySQL

注&#xff1a;服务器默认以root用户登录 服务器的终端中输入以下指令&#xff1a; # 安装 MySQL apt install mysql-server # 查看版本 mysql -V # 查看 MySQL 服务状态 systemctl status mysql # 安装完成后&#xff0c;MySQL 服务将自动启动 # MySQL 服务在系统启动时自动…

spring 入门 一

文章目录 Spring简介Spring的优势Spring的体系结构 Spring快速入门Spring程序开发步骤导入Spring开发的基本包坐标编写Dao接口和实现创建Spring核心配置文件在Spring配置文件中配置UserDaoImpl使用Spring的API获得Bean实例 Spring配置文件Bean标签基本配置Bean标签范围配置Bean…

2.10

头文件&#xff1a; #include <sqlite3.h> 编译时候要加上-lsqlite3 gcc a.c -lsqlite3 1&#xff09;sqlite3_open 打开一个数据库&#xff0c;如果数据库不存在&#xff0c;则创建一个数据库 2&#xff09;sqlite3_close 关闭数据库&#xff0c;断开句柄所拥有的资…

HarmonyOS 横屏调试与真机横屏运行

我们有些程序 需要横屏才能执行出效果 我们在预览器上 点击如下图指向出 就进入一个横屏调试了 但 我们真机运行 依旧是竖着的 我们如下图 找到 module.json5 在 abilities 下面 第一个对象 最下面 加上 "orientation": "landscape"然后 我们再真机运…

Oracle表结构转成MySQL表结构

在将Oracle数据库表结构转换为MySQL数据库表结构时&#xff0c;需要考虑两大数据库系统之间的差异。以下是一些基本步骤和注意事项&#xff0c;帮助您进行转换&#xff1a;1、字符集和排序规则&#xff1a; Oracle使用的是固定的字符集和排序规则&#xff0c;而MySQL使用的是可…

Rust变量与常量介绍

Rust是一门注重安全性和性能的系统编程语言&#xff0c;其中变量和常量的概念有着独特的设计和特性。在本文中&#xff0c;我们将深入了解Rust中的变量和常量&#xff0c;并解释它们之间的区别&#xff0c;同时通过多个例子进行说明。 Rust常量 在Rust中&#xff0c;常量是不…

第三百二十一回

文章目录 1. 概念介绍2. 使用方法2.1 基本用法2.2 缓冲原理 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FadeInImage组件"相关的内容&#xff0c;本章回中将介绍CachedNetworkImage组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章…