当前位置: 首页 > news >正文

华为OD机试 - RSA加密算法(Java 2024 E卷 100分)

long n = (long) Math.sqrt(num);
与long n = (long) Math.floor(Math.sqrt(num));

这两行代码的目的都是计算 num 的平方根,并将结果转换为 long 类型的整数。然而,它们在处理方式上有一些微小的差别。

long n = (long) Math.sqrt(num);
long n = (long) Math.floor(Math.sqrt(num));

区别分析

  1. 第一种写法:(long) Math.sqrt(num);

    • Math.sqrt(num) 返回 num 的平方根,结果是一个 double 类型的浮点数。
    • (long) Math.sqrt(num) 直接将这个 double 类型的平方根结果转换为 long,这会截断小数部分,但不进行四舍五入。换句话说,它只保留整数部分,不管小数部分是多少。
    • 例如,如果 Math.sqrt(num) 的结果是 5.9,那么 (long) Math.sqrt(num) 的结果就是 5
  2. 第二种写法:(long) Math.floor(Math.sqrt(num));

    • Math.sqrt(num) 同样计算 num 的平方根,返回一个 double
    • Math.floor(Math.sqrt(num)) 会将平方根结果向下取整,即使小数部分非常接近下一个整数,也会返回不大于该值的最大整数。
    • 然后 (long) 将这个向下取整的结果转换为 long 类型。
    • 在大多数情况下,与第一种写法的结果相同,但理论上更加明确,确保向下取整。

区别举例

假设 num = 36

  • Math.sqrt(36) 的结果是 6.0,两种写法都将 n 设为 6

假设 num = 35

  • Math.sqrt(35) 的结果是大约 5.916.
    • (long) Math.sqrt(35) 会直接截断成 5
    • (long) Math.floor(Math.sqrt(35)) 也会返回 5,因为 Math.floor5.916 向下取整。

总结

虽然在大多数情况下两种写法的结果相同,但 Math.floor 确保了向下取整的意图更加明确,所以第二种写法通常更为严谨。

import java.util.*;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);long num = sc.nextLong();sc.close();long n = (long) Math.floor(Math.sqrt(num));String res = "-1 -1";for (long i = 2; i < n; ++ i) {if (num % i == 0) {long j = num / i;if (isPrime(i) && isPrime(j)) {if (i < j) {res = i + " " + j;} else {res = j + " " + i;}break;}}} System.out.println(res);}    private static boolean isPrime(long n) {// TODOif (n < 2) {return false;}long sqrtN = (long) Math.floor(Math.sqrt(n));for (int i = 2; i < sqrtN; ++ i) {if (n % i == 0) {return false;}}return true;}
}
http://www.lryc.cn/news/482414.html

相关文章:

  • 分组校验在Spring中的应用详解
  • torch.nn.**和torch.nn.functional.**的区别
  • Air780E基于LuatOS编程开发
  • 贪心算法-汽车加油
  • Qt信号和槽-->day04
  • 【Linux】为终端命令自定义快件键并弹窗提醒 设置快捷键切换网络代理(Network Proxy)Disabled/Manual 并弹窗提醒
  • 十六:Spring Boot依赖 (1)-- spring-boot-starter 依赖详解
  • 讲讲关于SNMP与智能PDU插座
  • 在CentOS下安装RabbitMQ
  • 前端使用Canvas实现网页电子签名(兼容移动端和PC端)
  • 什么是OSTRPT报文?
  • PICO+Unity MR空间锚点
  • electron 中 contextBridge 作用
  • 15分钟学 Go 第 42 天:RESTful API设计
  • 如何安全的中断一个运行中的线程?
  • 【121. 买卖股票的最佳时机】——贪心算法/动态规划
  • LLMs之Calculate:利用大语言模型技术基于文本内容实现数字计算能力的简介、常用方法、代码实现之详细攻略
  • LeetCode题练习与总结:判断子序列--392
  • json数据结构的转换
  • mysql删除语句:@Update(“TRUNCATE TABLE employee“)讲解
  • 如何修改浏览器指纹?
  • 实现3D热力图
  • GEE ui界面实现:用户自画多边形, 按面积比例在多边形中自动生成样点,导出多边形和样点shp,以及删除上一组多边形和样点(有视频效果展示)
  • React diff算法和Vue diff算法的主要区别
  • WSL 2 中 FastReport 与 FastCube 的设置方法与优化策略
  • 《线性代数》学习笔记
  • Redis三种集群模式:主从模式、哨兵模式和Cluster模式
  • CDH大数据平台部署
  • 7.4、实验四:RIPv2 认证和触发式更新
  • 【一步步开发AI运动小程序】二十一、如果将AI运动项目配置持久化到后端?