2009NOIP普及组真题 3. 细胞分裂

线上OJ:

一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid=1947

核心思想:

本题的意思是 在所有的 S i Si Si 中,找一个 S i t Si^t Sit 最早能被 m 1 m 2 m1^{m2} m1m2 整除
上述若能整除,则说明:
1、 m 1 m1 m1 的质因数肯定是 S i Si Si 质因数的子集 (换句话说,m1 的质因数都是 Si 的因数。如果 m 1 m1 m1 中某个质因数不能整数 S i Si Si,则整个 S i t Si^t Sit 不可能被 m 1 m 2 m1^{m2} m1m2 整除)
2、若 m 1 m1 m1 的质因数本身是多次幂(比如 m 1 m1 m1 为40,则 m 1 = 2 ∗ 2 ∗ 2 ∗ 5 = 2 3 ∗ 5 m1 = 2*2*2*5 = 2^3*5 m1=2225=235,即质因数2的幂次为3,质因数5的幂次为1)。若此时的 m2 是2,则
m 1 m 2 = ( 2 3 ∗ 5 1 ) 2 = ( 2 3 ∗ 2 ) ∗ ( 5 1 ∗ 2 ) = 2 6 ∗ 5 2 m1^{m2} = (2^3*5^1)^2 = (2^{3*2})*(5^{1*2})=2^6*5^2 m1m2=(2351)2=(232)(512)=2652

如果此时 S i Si Si 的质因数中,2有6个,5有2个,则 1 秒后到达 S i Si Si 即可直接整除 m 1 m 2 m1^{m2} m1m2
如果此时 Si 的质因数中,2有3个,5有1个,则2个周期后可整除 m 1 m 2 m1^{m2} m1m2
如果此时 Si 的质因数中,2有2个,5有1个,则3个周期后才能整除 m 1 m 2 m1^{m2} m1m2

故, S i Si Si 的分裂周期为 S i Si Si 的质因数中分裂周期最多的那个

关键步骤:

1、先计算 m 1 m1 m1 的质因数,存储到数组 p [ i ] p[i] p[i] 中;用 c [ i ] c[i] c[i] 记录质因数 p [ i ] p[i] p[i] 的个数。
2、如果是质数,要单独考虑
3、如果m1为1,则无需计算,直接输出
4、在读入每个 S i Si Si 时按以下步骤进行:
a. 检查m1的每一个质因数是否都是 Si 的因数,如果有一个不是,则Si不可能被除尽
b. 检查每一个质因数在 Si 中出现的次数
c. 求出每一个质因数需经过几个周期方能被 m 1 m1 m1 中对应的幂次整除

举例: S i Si Si 为800,m1为40,m2 是2。则 S i = 2 5 ∗ 5 2 , m 1 m 2 = 2 6 ∗ 5 2 Si=2^5*5^2,m1^{m2} =2^6*5^2 Si=2552m1m2=2652。细胞 Si 经过一个周期变为 2 5 ∗ 5 2 2^5*5^2 2552,无法被 2 6 ∗ 5 2 2^6*5^2 2652 整除,经过两个周期变为 2 10 ∗ 5 4 2^{10}*5^4 21054,可以被 2 6 ∗ 5 2 2^6*5^2 2652 整除。所以 Si=800的需要2个周期。

d. 找出 Si 的所有质因数中分裂周期最多的那个
5、所有的 Si 都读完后,找出分裂周期最小的数值,就是本题的答案。

题解代码:
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;const int N = 30005;int n, m1, m2, s, ans, maxn;
// p[i]记录m1的第i个质因数,c[i]表示m1的第i个质因数的个数。比如12=2*2*3,所以p[1]=2,c[1]=2,p[2]=3,c[2]=1
int p[N], c[N], cnt = 0; // cnt记录m1的质因数的个数。比如 12的质因数是2和3,则cnt=2
bool isprime = true; // m1是否为质数int main()
{scanf("%d %d %d", &n, &m1, &m2);if(m1 == 1)  // 如果m1为1,说明就1个试管,直接放即可{printf("0\n");return 0;}int x = m1;for(int i = 2; (i*i <= m1) && x; i++) // 求出m1的所有质因数,以及每个质因数的个数{if( x % i == 0 ) // 如果存在i能整除m1{isprime = false;  // 如果找到一个质因数,则m1不是质数p[++cnt] = i; // 将质因数 i 存到p数组里,p数组从p[1]开始}while( x % i == 0 ){c[cnt]++; // 记录m1的质因数 i 的个数x /= i;}        }if(isprime) // 如果是质数,则上述for循环无法找到质因数。{p[++cnt] = m1; // 质数的质因数只有自己c[cnt] = 1;}ans = INF;while(n--) // 读入n个数,逐次判断{maxn = -INF; // 每一轮开始前,先初始化。maxn 记载读入s需要分裂的周期bool flag = true;scanf("%d", &s);for(int i = 1; i <= cnt && s; i++)  // 检查m1的每一个质因数是否都是s的因数{int a = 0;if(s % p[i]) // 如果m1的质因数p[i]不是s的因数,则s不可能被m1^m2除尽{flag = false;break;}while(s % p[i] == 0)  // 如果能除尽,则统计s内有多少个p[i]{a++;s /= p[i];}maxn = max(maxn, (c[i]*m2 + a - 1)/a); // s的分裂周期为s的质因数中分裂周期最多的那个。举例:质因数2需要分裂5次能满足,质因数3需要分裂2次就能满足,则s的分裂周期为5}if(!flag) continue;ans = min(ans, maxn);  // 在所有的s种,找一个分裂周期最小的}if(ans == INF) printf("-1\n");else  printf("%d\n", ans);return 0;
}

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

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

相关文章

获取Java 虚拟机进程ID(java应用进程Id的方法) Linux windows

可以通过以下几种方式获取Java虚拟机&#xff08;JVM&#xff09;的进程ID&#xff08;PID&#xff09;&#xff1a; 在Linux/Unix/macOS系统中&#xff1a; 使用ps命令结合grep: ps -ef | grep java这个命令会列出所有包含"java"的进程信息。从中你可以找到你的Jav…

0060__设计模式

1. 简单工厂模式( Simple Factory Pattern ) — Graphic Design Patterns 工厂模式 | 菜鸟教程 【设计模式——学习笔记】23种设计模式——建造者模式Builder&#xff08;原理讲解应用场景介绍案例介绍Java代码实现&#xff09;-CSDN博客

基于FPGA的AD7705芯片驱动设计VHDL代码Quartus仿真

名称&#xff1a; 软件&#xff1a;Quartus基于FPGA的AD7705芯片驱动设计VHDL代码Quartus仿真&#xff08;文末获取&#xff09; 语言&#xff1a;VHDL 代码功能&#xff1a; AD77025芯片控制及串口输出 1、使用FPGA控制AD77025芯片&#xff0c;使其输出AD值 2、将数据计…

安卓开发(二)Android开发基础知识

了解Android Android大致可以分为4层架构&#xff1a;Linux内核层、系统运行库层、应用框架层和应用层。 内核层&#xff1a;Android系统是基于Linux内核的&#xff0c;这一层为Android设备的各种硬件提供了底层的驱动&#xff0c;如显示驱动、音频驱动、照相机驱动、蓝牙驱动…

CANdela/Diva系列2--CANdela Studio的工作树介绍1

本系列的第一篇文章&#xff08;CANdela/Diva系列1--CANdela Studio的基本介绍&#xff09;主要介绍了CANdela这个工具&#xff0c;本篇文章将对CANdela Studio的工作树的每个模块进行详细介绍&#xff0c;不啰嗦&#xff0c;直接开始&#xff01; 目录 1. ECU Information的…

Activiti工作流中的自定义代理人、候选人与候选组

前言 在Activiti这一强大开源的工作流引擎中&#xff0c;灵活地管理任务的处理流程是其核心功能之一。其中&#xff0c;“代理人”、“候选人”与“候选组”是实现任务分派和审批流程的关键概念。本文将深入解析这三个概念的区别、定义及其在实际工作流设计中的应用。 1. 代理…

技术速递|使用 .NET 为 Microsoft AI 构建可扩展网关

作者&#xff1a;Kara Saucerman 排版&#xff1a;Alan Wang Microsoft AI 团队构建了全面的内容、服务、平台和技术&#xff0c;以便消费者在任何设备上、任何地方获取他们想要的信息&#xff0c;并为企业改善客户和员工的体验。我们的团队支持多种体验&#xff0c;包括 Bing、…

MapReduce的Shuffle过程

Shuffle是指从 Map 产生输出开始,包括系统执行排序以及传送Map输出到Reduce作为输入的过程. Shuffle 阶段可以分为 Map 端的 Shuffle 阶段和 Reduce 端的 Shuffle 阶段. Shuffle 阶段的工作过程,如图所示: Map 端的 Shuffle 阶段 1&#xff09;每个输入分片会让一个 Map 任务…

【探索Java编程:从入门到入狱】Day4

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台

YoloDeployCsharp|基于.NET Framework的YOLO深度学习模型部署测试平台 1. 项目介绍2. 支持模型3. 时间测试4. 总结 1. 项目介绍 基于.NET Framework 4.8 开发的深度学习模型部署测试平台&#xff0c;提供了YOLO框架的主流系列模型&#xff0c;包括YOLOv8~v9&#xff0c;以及其系…

MySql数据库(概念篇)

数据库概念 什么是数据库 数据库见名之意&#xff0c;就是用来存储数据的仓库&#xff0c;是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 没接触数据库之前&#xff0c;一般都是将数据存储在文件中。比如execl文件&#xff0c;word文件中。但是…

基于SpringBoot的饭店外卖平台的设计与实现

项目描述 这是一款基于SpringBoot的饭店外卖平台的系统 模块描述 用户端 登录 首页 商家信息 点餐 菜品列表 下单 订单列表 账号下单列表 个人中心 个人资料 修改信息 评论管理 评论菜品 查看评论 打赏骑手 打赏骑手 管理员 登录 菜品管理 修改 下架 订单列表 下单记录 菜品管理…

tftp 服务部署

这个服务挺简单的&#xff0c;但是今天用到了&#xff0c;还是写一下把 简单文件传输协议&#xff08;Trivial File Transfer Protocol&#xff0c;TFTP&#xff09;是一种基于 UDP 协议在客户端 和服务器之间进行简单文件传输的协议。顾名思义&#xff0c;它提供不复杂、开销不…

nginx 负载均衡、反向代理实验

nginx 负载均衡、反向代理实验 实验目的 理解概念&#xff1a;明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能&#xff1a;学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用&#xff1a;通过实际操作&#xff0c;体验Nginx如何提升Web服务的可…

LeetCode406:根据身高重建队列

题目描述 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造并返回输入数…

ubuntu下qrencode arm 环境编译和使用

我有一个Linux 环境 V3S的qrm开发板&#xff0c;我需要在开发板上实现一个生成二维码的功能&#xff0c;于是想到了qrencode 这个库。 过程如下&#xff1a; 1&#xff0c;下载qrencode 源码(自行百度下载) 2&#xff0c;打开源码&#xff0c;可以看到源码里有一个configure…

TinyXML-2介绍

1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库&#xff0c;它是 TinyXML 的一个改进版本&#xff0c;专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库&#xff0c;并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括&#xff1a…

外设寄存器的映射到内存地址空间的过程

外设寄存器的映射到内存地址空间的过程称为内存映射I/O&#xff08;Memory-Mapped I/O&#xff0c;MMIO&#xff09;。这种映射是硬件设计的一部分&#xff0c;在芯片设计过程中由硬件工程师完成。以下是这个过程的一些重要步骤&#xff1a; 硬件设计&#xff1a;在微控制器或处…

你是我的荣耀 | 林先生:从酷爱数学到毕业走向数据分析岗位

人物背景&#xff1a; 研究生国家奖学金、本科生国家奖学金、学业奖学金一等奖、上海市优秀毕业生&#xff1b; 应用统计专业 CPDA优秀学员 ## 为什么选择数据分析相关专业 我是应用统计专业的一个应届毕业生&#xff0c;目前在一家上海市属的国企&#xff0c;从事数据分析相关…

远程工作的数据安全挑战和解决策略

随着远程工作的普及&#xff0c;数据安全面临了前所未有的挑战。企业在应对这些挑战时&#xff0c;必须采取切实有效的策略来保护敏感信息。以下是远程工作数据安全的主要挑战和相应的解决策略&#xff1a; 数据安全挑战 设备丢失或被盗&#xff1a;员工在外工作时&#xff0c…