AcWing 4486. 数字操作题解
题目描述
给定一个整数 \(n\),你可以对该数进行任意次(可以是 \(0\) 次)变换操作。
每次操作为以下两种之一:
- 将整数 \(n\) 乘以任意一个正整数 \(x\)。
- 将整数 \(n\) 替换为 \(\sqrt{n}\)(执行此操作的前提是 \(\sqrt{n}\) 为整数)。
请你计算,通过上述操作,\(n\) 能达到的最小可能值,以及达到最小可能值所需要的最少操作次数。
思路


我们先分解质因数看看





最后将所有质因数乘起来,就是最小值,比如样例为2×3=6
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MaxV=1E6+10;
int num,step;
int d[MaxV]; //d[i]记录质因数i的指数
int Init() //先分解质因数
{
int t=num,maxn=sqrt(t),maxc=-1;
for(int i=2;i<=maxn;i++)
{
while(t%i==0)
{
t/=i;
d[i]++;
maxc=max(maxc,d[i]);
}
}
if(t>1)
{
d[t]++;
maxc=max(maxc,d[t]);
}
return maxc; //取所有因数的最大值
}
int main()
{
int maxc;
long long t=1; //记录所有质因数的乘积(不包括幂)
cin>>num;
maxc=Init();
int i=0,sum2=0;
while(maxc>pow(2,i))i++; //寻找最小的2^n>=maxc
int l=i; //记录结果
for(int i=1;i<=num;i++)
{
if(d[i])
{
t*=i; //记录所有质因数的乘积
sum2+=pow(2,l)-d[i]; //对(不用乘)的数字的特殊处理,即直接开根号
}
}
if(sum2==0||i==0) //特殊情况,直接开根号
{
cout<<t<<" "<<i<<endl;
}
else
{
cout<<t<<" "<<i+1<<endl; //正常情况,先乘一次,再开根号
}
return 0;
}

AcWing 4486. 数字操作题解的更多相关文章
- PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?
问题描述: 用PHP向MySql数据库中修改数据,实现增删改(数据库能正确连接) 经测试,代码只能对数字进行正常的增删改操作,非数字操作无效 但要在课程名称中输入中文,应该如果修改呢? 存 ...
- 数字操作 转为false的类型 typeof操作符 isNaN函数
console.group('数字操作'); // 浮点数值的内存空间是整数的两倍: // 会alert出来3e-7;从小数点后面6个0开始,就用科学计数法了: //alert(0.0000003); ...
- c/c++再学习:常用字符串转数字操作
c/c++再学习:常用字符串转数字操作 能实现字符串转数字有三种方法,atof函数,sscanf函数和stringstream类. 具体demo代码和运行结果 #include "stdio ...
- Leetcode 137. 只出现一次的数字 II - 题解
Leetcode 137. 只出现一次的数字 II - 题解 137. Single Number II 在线提交: https://leetcode.com/problems/single-numb ...
- java大数字操作:BigInteger,BigDecimal(浮点型)
java大数字操作: BigInteger:大数字整型的 BigDecimal(浮点型):大数字小数的,也适用大的整数 BigInteger: String num1 = "10038182 ...
- 菜鸡的Java笔记 数字操作类
数字操作类 Math 类的使用 Random 类的使用 BigInteger 和 BigDecimal 类的使用 Math 是一 ...
- Java BigDecimal大数字操作
在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类.这两个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而B ...
- 数字(数学)操作类 Math Random 类 ,大数字操作类
Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法
- ES6数字操作
数字判断和转换 数字验证Number.isFinite( xx ) 可以使用Number.isFinite( )来进行数字验证,只要是数字,不论是浮点型还是整形都会返回true,其他时候会返回fals ...
- ES6系列_5之数字操作
下面是针对ES6新增的一些数字操作方法进行简单梳理. 1.数字判断和转换 (1)数字验证Number.isFinite( xx ) 使用Number.isFinite( )来进行数字验证,只要是数字, ...
随机推荐
- linux 安装 node 和 npm 服务
1.安装文件下载 下载地址:https://nodejs.org/zh-cn/download/ 2.安装步骤 1.将安装包上传到指定位置(我习惯放到:/usr/local/application/目 ...
- 轻量级Web框架Flask(二)
Flask-SQLAlchemy MySQL是免费开源软件,大家可以自行搜索其官网(https://www.MySQL.com/downloads/) 测试MySQL是否安装成功 在所有程序中,找到M ...
- 第3章. markdown语法
常用语法 1. 文字格式 1.1 给文字添加引用 在文字的两侧,使用 ` 符号包裹起来 怒发冲冠,凭栏处,潇潇雨歇. 1.2 设置文字样式为斜体 在文字的两侧,使用 * 符号包裹起来 抬望眼,仰天长啸 ...
- 从原理聊JVM(三):详解现代垃圾回收器Shenandoah和ZGC
作者:京东科技 康志兴 Shenandoah Shenandoah一词来自于印第安语,十九世纪四十年代有一首著名的航海歌曲在水手中广为流传,讲述一位年轻富商爱上印第安酋长Shenandoah的女儿的故 ...
- Marior去除边距和迭代内容矫正用于自然文档矫正
一.简要介绍 本文简要介绍了论文" Marior: Margin Removal and Iterative Content Rectification for Document Dewar ...
- [Pytorch框架] 4.2.1 使用Visdom在 PyTorch 中进行可视化
文章目录 4.2.1 使用Visdom在 PyTorch 中进行可视化 安装 坑 基本概念 Environments Panes VIEW 可视化接口 使用 绘制简单的图形 更新损失函数 import ...
- 安装anaconda遇到的一些问题
文章目录 前言 一.报错:jupyter notebook:Bad file descriptor (C:\ci\zeromq_1602704446950\work\src\epoll.cpp:100 ...
- 基于.Net5+Vue+iView前后端分离通用权限开源系统
在Github上,.Net通用的权限框架非常多,功能也都比较强大,但是对于很多初学者来说,想要从零学习框架的搭建,就比较困难了. 所以,今天给大家推荐一套比较简单的前后端分离通用权限系统. 项目简介 ...
- 把ChatGPT调教成机器学习专家,以逻辑回归模型的学习为例
大家好我是章北海mlpy 看到一个蛮有意思的项目,可以把ChatGPT调教成导师 https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor 可以根据你选择的学习 ...
- 2022-12-01:从不订购的客户。找出所有从不订购任何东西的客户,以下数据的答案输出是Henry和Max,sql语句如何写? DROP TABLE IF EXISTS `customers`; C
2022-12-01:从不订购的客户.找出所有从不订购任何东西的客户,以下数据的答案输出是Henry和Max,sql语句如何写? DROP TABLE IF EXISTS `customers`; C ...