题目描述

给定一个整数 \(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. 数字操作题解的更多相关文章

  1. PHP 向 MySql 中数据修改操作时,只对数字操作有效,非数字操作无效,怎么办?

    问题描述:   用PHP向MySql数据库中修改数据,实现增删改(数据库能正确连接) 经测试,代码只能对数字进行正常的增删改操作,非数字操作无效   但要在课程名称中输入中文,应该如果修改呢?   存 ...

  2. 数字操作 转为false的类型 typeof操作符 isNaN函数

    console.group('数字操作'); // 浮点数值的内存空间是整数的两倍: // 会alert出来3e-7;从小数点后面6个0开始,就用科学计数法了: //alert(0.0000003); ...

  3. c/c++再学习:常用字符串转数字操作

    c/c++再学习:常用字符串转数字操作 能实现字符串转数字有三种方法,atof函数,sscanf函数和stringstream类. 具体demo代码和运行结果 #include "stdio ...

  4. Leetcode 137. 只出现一次的数字 II - 题解

    Leetcode 137. 只出现一次的数字 II - 题解 137. Single Number II 在线提交: https://leetcode.com/problems/single-numb ...

  5. java大数字操作:BigInteger,BigDecimal(浮点型)

    java大数字操作: BigInteger:大数字整型的 BigDecimal(浮点型):大数字小数的,也适用大的整数 BigInteger: String num1 = "10038182 ...

  6. 菜鸡的Java笔记 数字操作类

    数字操作类        Math 类的使用        Random 类的使用        BigInteger 和 BigDecimal 类的使用                Math 是一 ...

  7. Java BigDecimal大数字操作

    在java中提供了大数字的操作类,即java.math.BinInteger类和java.math.BigDecimal类.这两个类用于高精度计算,其中BigInteger类是针对大整数的处理类,而B ...

  8. 数字(数学)操作类 Math Random 类 ,大数字操作类

    Math 提供了大量的数学操作方法 Math类中所有的方法都是static 方法

  9. ES6数字操作

    数字判断和转换 数字验证Number.isFinite( xx ) 可以使用Number.isFinite( )来进行数字验证,只要是数字,不论是浮点型还是整形都会返回true,其他时候会返回fals ...

  10. ES6系列_5之数字操作

    下面是针对ES6新增的一些数字操作方法进行简单梳理. 1.数字判断和转换 (1)数字验证Number.isFinite( xx ) 使用Number.isFinite( )来进行数字验证,只要是数字, ...

随机推荐

  1. Python argparse参数管理学习笔记1

    1.前言 最近尝试学习使用argparse进行参数管理,顺便改善一下我那丝毫都不专业的.简单粗暴的代码习惯. argparse模块可以让人轻松地编写用户友好地命令行接口,并且还能够自动生成帮助与使用手 ...

  2. Netty介绍与认识

    概述 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 2.体系结构图 Netty的核 ...

  3. 真实场景sql优化持续更新(老司机必备)

    概述 下述场景,均来自实际产品线上经验,出于保密考量,所有需求场景都是仿造的,模拟遇到过的真实场景. 场景一: 统计数据(Order by 不具备唯一性导致的分页数据混乱) 需求 在实际业务场景中,我 ...

  4. MySQL-分组函数ROLLUP的基本用法

    一.ROLLUP简介 ROLLUP是GROUP BY子句的扩展. ROLLUP选项允许包含表示小计的额外行,通常称为超级聚合行,以及总计行. 通过使用ROLLUP选项,可以使用单个查询生成多个分组集. ...

  5. golang在编程语言排行榜上排名第10,请不要说golang已死。

    四月头条:编程语言 Zig 进入 TIOBE 指数前 50 名 最近,我们讨论了高性能编程语言的出现.由于需要处理的数据量越来越大,这些编程语言正在蓬勃发展.因此,C 和 C++ 在前十名中表现良好, ...

  6. 2020-11-15:手写代码:行有序、列也有序的二维数组中,找num,找到返回true,否则false?

    福哥答案2020-11-15: 此题来源于leetcode240和剑指 Offer(第 2 版)面试题4.1.线性查找.从二维数组的坐下角开始查找.如果当前元素等于目标值,则返回 true.如果当前元 ...

  7. 2022-01-29:连接词。 给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 。 连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串

    2022-01-29:连接词. 给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 . 连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串 ...

  8. Linux搭建FTP服务

    欢迎来到千汐   博客名称:千秋云染博客网址:https://www.cnblogs.com/skyrainmom 寄语:在混乱不堪的世界里你只管前行,时间替会证明一切 world cookie He ...

  9. go语言中实现生产者-消费者模式有哪些方法呢

    1. 简介 本文将介绍在 Go 语言中实现生产者消费者模式的多种方法,并重点探讨了通道.条件变量的适用场景和优缺点.我们将深入讨论这些方法的特点,以帮助开发者根据应用程序需求选择最适合的方式.通过灵活 ...

  10. git解决一个电脑多用户情况(win7)

    首先:在输入ssh-keygen -t rsa -C "注册邮箱"后不要急着按enter,此时输入秘钥对的文件名,不要跟默认文件重名(默认的是id_rsa)