题目描述

给定一个整数 \(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. day32:进程&进程join&守护进程deamon

    目录 1.进程的基本概念 2.进程初体验 3.join:先子后主 4.守护进程:deamon 5.使用自定义类的方式创建进程 6.两张和进程相关的图 进程的基本概念 什么是进程? 进程就是正在运行的程 ...

  2. RDIFramework.NET Web版报表管理-助力企业高效智能图表

    功能描述 在RDIFramework.NET Web版本中全新的报表管理功能模块,非常实用的功能,重量级推荐.主要用于对日常常用的报表做定制展示.可以自动发布到模块(就可授权给指定资源访问),在报表定 ...

  3. pyinstaller打包python程序

    pyinstaller打包python程序 1.pyinstaller安装 安装命令: #升级pip版本 >>> pip install -U pip #安装pyinstaller ...

  4. Django基于一对多的正向查询和反向查询

    1.正向查询 obj = models.User.objects.get(name='longge') name = obj.group.name print(name) # 肖邦组 2.反向查询 & ...

  5. 理解Linux系统: 进程

    Linux内核版本: 2.6.11.12 编写代码: 创建进程 创建进程使用fork系统调用,官方文档对于fork的描述: fork() creates a new process by duplic ...

  6. 面向接口编程实践之aspnetcoreapi的抽象

    最为一名越过菜鸟之后的开发,需要做接口开发.下面做一个纯粹的接口编程的实例demo,仅仅是一个webapi接口的抽象. 下面是代码接口,AbsEFWork是webapi,BaseEntityFrame ...

  7. AI测试101:测试AI系统的实用技巧&ML和AI自动化工具

    基于人工智能的系统,也称为神经网络(NN Neural Networks),和其他应用程序一样是 "系统",因此需要测试.本文将指导你测试AI和基于NN的系统,并理解相关概念. 测 ...

  8. 【Dotnet 工具箱】JIEJIE.NET - 强大的 .NET 代码混淆工具

    你好,这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,实用的工具和组件,希望对您有用! JIEJIE.NET - 强大的 .NET 代码混淆工具 JIEJIE.NET JIEJIE.NET ...

  9. 【Python基础】字典的基本使用

    字典是由一系列键值对组成的无序集合.每个键值对包含一个键和一个对应的值.键必须是不可变的,如字符串.数字或元组.值可以是任意类型的对象.字典可以使用花括号({})或者内置函数dict()来创建. di ...

  10. 【Linux】(小白向)详解VirtualBox网络配置-配置Linux网络

    本文时间 2023-05-18 作者:sugerqube漆瓷 本文面向新手,重在理解会舍弃不少精密的理论,还请大佬们见谅. 本文目标:成功使用ssh工具登录linux,同时linux能连接外网. 网络 ...