[可达鸭四月月赛——入门赛第六场(周六) T4]原初数题解

本题解署名:王胤皓

正文开始

题意

时间限制:1秒 内存限制:256M

题目描述

如果一个数字只由若干个不同的质数相乘得到,那么我们就称这个数字为“原初数”。本题中指的数字都是大于 1 1 1 的数字。

小可认为,原初数是一切数字的源头。当然,质数本身也是原初数。除了质数以外,比如 6 = 2 × 3 6=2\times 3 6=2×3 42 = 2 × 3 × 7 42=2\times 3\times 7 42=2×3×7 等都是原初数。但是 12 = 2 × 2 × 3 12=2\times 2\times 3 12=2×2×3 8 = 2 × 2 × 2 8=2\times2\times2 8=2×2×2 灯不是原初数。

例如 6 = 2 1 × 3 1 6=2^1\times3^1 6=21×31 如果有一个不是原初数的数字,只有 2 2 2 3 3 3 作为质因数,那么这个数字称为 6 6 6 的子数。比如 6 6 6 的子数有 12 、 24 、 36 12、24、36 122436 等。但是 15 15 15 等数字不是 6 6 6 的子数。

但是数字是无穷的。于是小可决定把范围限制在 [ 2 , n ] [2,n] [2,n] 内。然后小可会在这个范围内给你 m m m 个数字。

如果小可给的数字是原初数,请从小到大输出这个原初数的子数有哪些。当然,这些子数都得在 [ 2 , n ] [2,n] [2,n] 的范围内。

如果小可给的数字不是原初数,那么输出这个数字的原初数。具体格式见输出描述和样例。

输入描述

第一行两个正整数 n , m n,m n,m,代表小可划定的范围为 [ 2 , n ] [2,n] [2,n],小可会在这个范围内给你 m m m个数字。

第二行 m m m 个正整数​​ a 1 , a 2 ⋯ , a m a_1,a_2\cdots,a_m a1,a2,am,代表小可给你的 m m m 个数字。

输出描述

对于每个给定的数字,如果它是原初数,那么首先输出 A: ,然后输出这个数字的子数,从小到大排列。

如果这个数字不是原初数,那么首先输出 B: ,然后输出这个数字的原初数。

注意,冒号是英文冒号。冒号后面有一个空格。

每个给定的数字的输出占一行。具体情况参考样例。

样例输入

100 10
2 3 91 24 50 75 12 15 20 100

样例输出

A: 4 8 16 32 64
A: 9 27 81
A:
B: 6
B: 10
B: 15
B: 6
A: 45 75
B: 10
B: 10

提示

如果把原初数分解成质因数相乘的形式,可以发现,每个质数的指数都是 1 1 1。比如 10 = 2 1 × 5 1 10=2^1\times5^1 10=21×51

子数就是在原初数的基础上,某些质因数的指数大于 1 1 1。比如 10 10 10 的子数有 2 3 × 5 1 , 2 2 × 5 4 2^3\times5^1,2^2\times5^4 23×51,22×54等等。

数据范围

对于 20 % 20\% 20% 的数据, 2 ≤ n ≤ 20 , 1 ≤ m ≤ 10 2\le n\le20,1\le m\le10 2n20,1m10

对于另外 20 % 20\% 20% 的数据, 2 ≤ n ≤ 1000 , 1 ≤ m ≤ 1000 2\le n\le1000,1\le m\le1000 2n1000,1m1000

对于另外 20 % 20\% 20% 的数据, 2 ≤ n ≤ 1 0 4 , 1 ≤ m ≤ 1 0 4 2\le n\le10^4,1\le m\le10^4 2n104,1m104

对于另外 20 % 20\% 20% 的数据, 2 ≤ n ≤ 2 × 1 0 6 , 1 ≤ m ≤ 1000 2\le n\le2\times10^6,1\le m\le1000 2n2×106,1m1000

对于另外 20 % 20\% 20% 的数据, 2 ≤ n ≤ 3 × 1 0 6 , 1 ≤ m ≤ 3 × 1 0 6 2\le n\le3\times10^6,1\le m\le3\times10^6 2n3×106,1m3×106

对于 100 % 100\% 100% 的数据,保证小可给定的 m m m 个数字中的原初数的个数不超过 5 × 1 0 4 5\times 10^4 5×104

思路

upd:这题我问的王弘毅老师,王弘毅老师把他代码中的 Euler 函数给我看了看,然后我想了想主函数的内容,然后就 AC \colorbox{52C41A}{\color{white}{\texttt{AC}}} AC 了。

这题卡的比较紧,稍不注意就会得到 TLE \colorbox{052242}{\color{white}{\texttt{TLE}}} TLE 的好成绩(作者经历了 1 1 1 OLE \colorbox{052242}{\color{white}{\texttt{OLE}}} OLE, 4 4 4 TLE \colorbox{052242}{\color{white}{\texttt{TLE}}} TLE, 2 2 2 MLE \colorbox{052242}{\color{white}{\texttt{MLE}}} MLE 2 2 2 RE \colorbox{9D3DCF}{\color{white}{\texttt{RE}}} RE 2 2 2 WA \colorbox{E74C3C}{\color{white}{\texttt{WA}}} WA AC \colorbox{52C41A}{\color{white}{\texttt{AC}}} AC 的)。

首先进行一遍欧拉筛,筛出质数,然后顺便打出每个数的原初数是多少:

  • 如果这个数是质数,那么这个数的原初数就是这个数,所以 f i = i f_i=i fi=i
  • 在进行欧拉筛的时候,在遍历质数表的时候,加入一下语句:
    • 在判断 i m o d p r i m e j = 0 i\bmod prime_j=0 imodprimej=0 的时候,那么 f i × p r i m e j = f i f_{i\times prime_j}=f_i fi×primej=fi
      • 证明:因为 p r i m e j prime_j primej i i i 的一个因数,所以不需要再乘,直接相等即可。
    • 否则 f i × p r i m e j = f i × p r i m e j f_{i\times prime_j}=f_{i}\times prime_j fi×primej=fi×primej
      • 证明:因为 p r i m e j prime_j primej 不是 i i i 的一个因数,所以需要再乘,乘起来即可。

进行完之后,用 3 × 1 0 6 3\times10^6 3×106vector 存储原初数对应的这个原初数的 子数,但是如果 f i = i f_i=i fi=i,那么就说明这是个原初数,不统计。

主函数内:
先调用函数。
接下来 m m m 组:
如果 f a i = a i f_{a_i}=a_i fai=ai,那么这个数是一个原初数,输出 A: a n s a i ans_{a_i} ansai 的全部内容。
否则输出 B: f a i f_{a_i} fai

代码实现

#include<bits/stdc++.h>
using namespace std;
int n,m,cnt,pr[3000005],f[3000005];
bool vis[3000005];
vector<int> ans[3000005];
void Euler(int n){for(int i=2; i<=n; i++){if(!f[i]){pr[cnt++]=i;f[i]=i;}for(int j=0; j<cnt&&i*pr[j]<=n; j++){vis[pr[j]*i]=1;if(i%pr[j]==0){f[i*pr[j]]=f[i];break;}f[i*pr[j]]=f[i]*pr[j];}}for(int i=2; i<=n; i++){if(f[i]==i) continue;ans[f[i]].push_back(i);}
}
int main(){cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);cin>>n>>m;Euler(n);while(m--){int a;cin>>a;if(f[a]==a){cout<<"A: ";for(int i=0; i<ans[a].size()&&ans[a][i]<=n; i++) cout<<ans[a][i]<<" ";cout<<"\n";}else{cout<<"B: ";cout<<f[a]<<"\n";}}return 0;
}

三连一下再走吧~

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

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

相关文章

QT Sqlite 内存模式 简单读写

//本文描述了QT Sqlite 内存模式 &#xff0c;使用QT 自带库文件&#xff0c;写入和读取。 //QT 6.2.4 MSVC2019调试通过。 //需要在pro文件中加入QT sql #include <QCoreApplication> #include <QSqlDatabase> #include <QSqlQuery> #include <QDebu…

在android 源代码中 使用gradlew 编译android 模块

gradle 编译子模块 在Gradle中编译子模块通常涉及到以下步骤&#xff1a; 1、确保你的项目结构是模块化的&#xff0c;每个子模块都是一个独立的目录2、在项目的根目录下的setting.gradle文件中&#xff0c;包含需要编译的子模块。例如&#xff1a;include ‘:submodule-name…

3D开发工具HOOPS SDK在电子设计自动化(EDA)中的应用

在当今电子行业中&#xff0c;电子设计自动化&#xff08;EDA&#xff09;软件的重要性日益突显。这些软件不仅需要能够处理大量的电子设计数据&#xff0c;而且需要提供高效的设计工作流程、准确的分析模拟功能以及直观的可视化界面。为了满足这些需求&#xff0c;开发者们寻求…

Kafak简单使用

Concept 待后续填坑…Push Data from kafka import KafkaProducer import jsondef push_kafka(sqlstring, valuelist):# logging.info("kafka string ----- [%s]" % (sqlstring % valuelist))producer KafkaProducer(bootstrap_servers["ip1:9092", &quo…

真实世界的密码学(一)

原文&#xff1a;annas-archive.org/md5/655c944001312f47533514408a1a919a 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 前言 序言 当你拿起这本书时&#xff0c;你可能会想&#xff0c;为什么又一本关于密码学的书&#xff1f;甚至&#xff0c;为什么我要读这本…

软考高级架构师:AI 通俗讲解软件维护的类型:正确性维护、适应性维护、完善性维护、预防性维护

软件维护是指在软件交付使用后进行的一系列活动&#xff0c;其目的是修复错误、提升性能或更新软件以适应变化的需求。通常&#xff0c;软件维护可以分为四种类型&#xff1a;正确性维护、适应性维护、完善性维护和预防性维护。下面我将用简单的例子和通俗的语言来解释这四种类…

实验4 数字频率计

实验目的&#xff1a; 1、使用铆孔U7输出一个脉冲&#xff0c;频率不定。 2、使用铆孔V7测量脉冲频率&#xff0c;并在数码管上显示。 实验内容及步骤&#xff1a; 设计原理 测量频率的方法有很多&#xff0c;按照其工作原理分为无源测量法、比较法、示波器法和计数法等。…

【Java】文件操作(一)

文章目录 ✍一、文件的基本认识1.文件是什么&#xff1f;2.文本文件和二进制文件3.文件权限4.相对路径和绝对路径1.1绝对路径1.2相对路径 ✍二、文件的基本操作1.FIle的属性2.File的构造方法3.File类的方法3.1File类的获取操作3.2File类的判断操作3.3文件创建和删除3.4其他的常…

深入理解JavaScript:对象什么时候创建

&#x1f31f; 我们在chrome浏览器中debug程序。为了好debug我们会写一些在日常开发中基本不会采用的代码书写方式。 JavaScript中创建对象有3中方式&#xff1a; 1、对象字面量&#xff1b; 2、new&#xff1b; 3、Object.create(对象)&#xff1b; 1、使用new创建对象 fun…

玩转PyCharm

玩转PyCharm PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个集成开发环境&#xff0c;它最大的优点是能够大大提升Python开发者的工作效率&#xff0c;为开发者集成了很多用起来非常顺手的功能&#xff0c;包括代码调试、高亮语法、代码跳转、智能提示、自动补…

SWOT分析法:知彼知己的战略规划工具

文章目录 一、什么是SWOT分析法二、SWOT分析法如何产生的三、SWOT分析法适合哪些人四、SWOT分析法的应用场景五、SWOT分析法的优缺点六、SWOT分析实例 一、什么是SWOT分析法 SWOT分析法是一种用于评估组织、项目、个人或任何其他事物的战略规划工具。SWOT是Strengths&#xff…

PotPlayer详细安装教程

安装步骤 进入官网&#xff1a; https://potplayer.tv/ 根据自己电脑的windows系统选择对应的版本安装 选择合适的字体 下载完成 优化设置 刚下好的potplayer仅限于能用&#xff0c;所有设置均为默认状态&#xff0c;我们需要进行优化 首先打开potplayer 右击选择选项 在…

C语言洛谷题目分享(10)最厉害的学生和明明的随机数

目录 1.前言 2.俩则题目 1.最厉害的学生&#xff08;p5740&#xff09; 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.题解 2. 明明的随机数 1.题目描述 2.输入格式 3.输出格式 4.输入输出样例 5.题解 3.小结 1.前言 哈喽大家好啊&#xff0c;今天继续为大…

W801学习笔记十三:掌机系统——系统基础组件

我们以一个唐诗学习程序为引子&#xff0c;把掌机的系统架子搭起来。 唐诗学习程序目标&#xff1a; 1、随机选择一首唐诗&#xff0c;随即选择其中的一句进行隐藏。 2、玩家从四个备选句子中选择一个答案。 系统目标&#xff1a; 1、静态数据尽量放在SD中&#xff0c;便于…

Record(记录)与密封类(sealed)

1.Recode记录 (1). 前言 Recode是一种特殊的类&#xff0c;在java1.4时被引入.其出现的原因是我们在编写JavaBean代码时我们会写出很多繁冗的代码(诸如getter/setter方法&#xff0c;重载的构造器&#xff0c;重写的hashCode()等等)&#xff0c;为了解决这个问题&#xff0c;…

Linux 基础命令使用创建用户

浏览网站的时候图片&#xff0c;看到一个小练习。创建用户分别位于不同的用户组。 解答下面的题目 2、建立用户使用 useradd&#xff0c;设置密码使用passwd的命令。大概不会使用命令可以借助man来解答。 先建立用户组&#xff1a; groupadd group1 # group1 不存在先建立&…

会声会影滤镜怎么用 会声会影滤镜效果怎么调 会声会影视频制作教程

在进行视频剪辑时&#xff0c;合理地运用滤镜效果可以提升视频的观赏性&#xff0c;使你的作品更加出彩。这篇文章便一起来学习会声会影滤镜怎么用&#xff0c;会声会影滤镜效果怎么调。 一、会声会影滤镜怎么用 使用会声会影的滤镜效果非常简单&#xff0c;以下是具体的操作…

全氟己酮灭火绳的用法早知道:灭火绳多少钱一米?

全氟己酮灭火装置作为一种高效、安全、环保的灭火技术&#xff0c;已经成为了备受青睐的新型灭火选择之一。伴随着市场需求不断增长&#xff0c;在全氟己酮厂家的努力下&#xff0c;各式各样的全氟己酮自动灭火装置不断涌现&#xff0c;包括自动灭火贴、灭火片、灭火毯、灭火绳…

如何打造自己的O2O平台系统:商业模式探索与实践

大家好&#xff0c;我是微三云周丽&#xff0c;今天给大家分析当下市场比较火爆的商业模式&#xff01; 小编今天跟大伙们分享什么是O2O平台系统&#xff1f; 在数字化浪潮的推动下&#xff0c;O2O&#xff08;Online to Offline&#xff09;商业模式已成为连接线上与线下、商家…

c primer plus(2)

前言 延续上一讲的内容&#xff0c;今天来写一写这本书的第三章&#xff1a;处理数据 好吧&#xff0c;本次博客仍然是总结重点内容 简单变量 在本书中变量有三个属性 1信息存储在什么地方 2要存储什么 3存储类型 比如 int braincount; braincount5; 这两行代码体现了…