华为OD机试真题B卷 Java 实现【素数之积】,附详细解题思路

news2024/12/28 5:24:14

一、题目描述

RSA加密算法在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高。

给定一个32位正整数,请对其进行因数分解,找出是哪两个素数的乘积。

二、输入描述

一个正整数num

0 < num <= 2147483647

三、输出描述

如果成功找到,以单个空格分割,从小到大输出两个素数,分解失败,请输出-1 -1。

四、解题思路

  1. 读取输入的正整数num;
  2. 计算num的平方根n,取整数部分作为循环的终止条件;
  3. 初始化一个空字符串s用于存储找到的素数因子;
  4. 初始化一个布尔变量flag为false,用于标记是否找到满足条件的素数因子;
  5. 从2开始循环遍历到n:
    • 如果num能被当前的循环变量i整除,说明i是num的一个因子。
    • 检查i和num/i是否都是素数,如果是素数,则找到满足条件的素数因子。
    • 更新flag为true,同时根据i和num/i的大小关系将它们拼接到字符串s中。
  6. 根据flag的值判断是否成功找到满足条件的素数因子:
    • 如果flag为true,输出字符串s。
    • 如果flag为false,输出"-1 -1"表示分解失败。
  7. 结束程序。

该算法通过从2开始逐个遍历到num的平方根n,判断是否存在两个素数因子的乘积等于num。对于每个循环变量i,通过检查i和num/i是否都是素数来确定是否满足条件。算法的时间复杂度主要取决于因数分解的步骤,通常为O(sqrt(num)),其中num为给定的32位正整数。

五、Java算法源码

public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    long num = sc.nextLong();
    long n = (long) Math.floor(Math.sqrt(num));
    String s = "";
    boolean flag = false;
    for (long i = 2; i <= n; i++) {
        if (num % i == 0) {
            if (isPrime(i) && isPrime(num / i)) {
                flag = true;
                if (i < num / i) {
                    s = i + " " + num / i;
                } else {
                    s = num / i + " " + i;
                }
            }
        }
    }
    if (flag) {
        System.out.println(s);
    } else {
        System.out.println("-1 -1");
    }
}

private static boolean isPrime(long a) {
    long n = (long) Math.floor(Math.sqrt(a));
    for (long i = 2; i <= n; i++) {
        if (a % i == 0) return false;
    }
    return true;
}

六、效果展示

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

科普:什么是小米刷机中的FASTBOOT

目录 1. 什么是手机上的FASTBOOT模式&#xff1f;2. 如何进入与退出FASTBOOT模式&#xff1f;2.1 进入方式2.2 退出方式 3. 如何在PC端安装FASTBOOT驱动&#xff1f;4. 怎么开启FASTBOOT命令提示符&#xff1f;5. 目前FASTBOOT命令有哪些类型&#xff1f;6. 常用的FASTBOOT命令…

第五章 堆内存

文章目录 前言一、&#x1f698; 本地方法1、什么是本地方法2、为什么使用 Native Method 二、&#x1f684; 本地方法栈三、&#x1f6a5; 堆内存1、-Xms10m -Xmx10m 设置堆内存的大小2、内存细分3、设置堆空间的大小与OOMjps 查看Java程序进程jstat -gc 进程号 查看堆内存参数…

CMake构建大型C/C++项目:跨平台设计与高级应用

CMake构建大型C/C项目&#xff1a;跨平台设计与高级应用 一、跨平台设计&#xff08;Cross-Platform Design&#xff09;1.1 跨平台设计原理&#xff08;Principles of Cross-Platform Design&#xff09;1.2 跨平台设计1.2.1 CMake的跨平台特性1.2.2 使用CMake进行跨编译1.2.3…

华为OD机试真题B卷 Java 实现【水仙花数】,附详细解题思路

一、题目描述 所谓水仙花数&#xff0c;是指一个n位的正整数&#xff0c;其各位数字的n次方和等于该数本身。 例如153是水仙花数&#xff0c;153是一个3位数&#xff0c;并且153 1^3 5^3 3^3。 二、输入描述 第一行输入一个整数n&#xff0c;表示一个n位的正整数。n在3到…

【计算机组成原理·笔记】系统总线概念

系统总线概念 各部件之间为了通信&#xff0c;单独连线&#xff0c;太复杂&#xff0c;于是诞生了总线的概念 基本概念 是一组能为多个部分分时共享的公共信息传送路线 总线分类 按传送方式 串行&#xff1a;在总线上1位1位的传输和接收并行&#xff1a;多位在总线上传输…

电脑计算机提示msvcp120.dll丢失该怎么修复

首先&#xff0c;让我们了解一下msvcp120.dll是什么&#xff0c;以及它的作用。msvcp120.dll是一个系统文件。它的作用是提供微软Visual C运行库的函数&#xff0c;以便应用程序可以使用这些函数来实现所需的功能。当您在运行某个程序时&#xff0c;如果发现出现了msvcp120.dll…

【备战秋招】每日一题:4月1日美团春招(二批)第五题:题面+题目思路 + C++/python/js/Go/java带注释

2023大厂笔试模拟练习网站&#xff08;含题解&#xff09; www.codefun2000.com 最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据&#xff0c;挂载到我们的OJ上&#xff0c;供大家学习交流&#xff0c;体会笔试难度。现已录入200道互联网大厂模拟练习题&…

面试专题:JAVA虚拟机(1)

关于Java虚拟机&#xff0c;在面试的时候一般会问的大多就是①Java内存区域、②虚拟机垃圾算法、③虚拟机垃圾收集 器、④JVM内存管理、⑤JVM调优、⑥Java类加载机制这些问题了。推荐书籍《深入理解Java虚拟机&#xff1a;JVM高级特性 与最佳实践&#xff08;第二版》、《…

嵌入式Linux驱动开发 04:基于设备树的驱动开发

文章目录 目的基础说明开发准备设备树调整驱动程序与测试总结设备树文件内容 目的 前面文章 《嵌入式Linux驱动开发 03&#xff1a;平台&#xff08;platform&#xff09;总线驱动模型》 引入了资源和驱动分离的概念&#xff0c;这篇文章将在前面基础上更进一步&#xff0c;引…

内网或者没有公网IP,如何轻松通过公网访问?

很多网友都面临一个普遍的问题&#xff0c;就是作为家庭宽带用户没有公网IP&#xff0c;即没有IP v4的公网IP&#xff0c;我们天天盼着有一天IP v6能够普及。IP v4一共有2的32次方个地址&#xff0c;约43亿&#xff0c;中国仅为7000多万个&#xff0c;IP v6一共有2的128次方个地…

MySQL8.0版本在CentOS系统的配置教程

1.安装MySQL MySQL安装完成后&#xff0c;会自动配置为名称叫做&#xff1a;mysqld的服务&#xff0c;可以被systemctl所管理&#xff0c;我们在进行系统的配置时&#xff0c;主要修改root密码和允许root远程登录。 # 通过grep命令&#xff0c;在/var/log/mysqld.log文件中&a…

iOS开发:__weak __strong解决Block嵌套

Block使用会存在循环引用的问题&#xff0c;多个Block嵌套使用的情况更复杂&#xff0c;还会出现对象nil的问题。 为什么会循环引用&#xff1f; 现在iOS开发都是在ARC引用计数管理模式下的&#xff0c;参考另一篇文章《Block底层原理》&#xff0c;我们知道Block访问外部变量…

文心一言 VS 讯飞星火 VS chatgpt (29)-- 算法导论5.2 1题

一、在 HIRE-ASSISTANT 中&#xff0c;假设应聘者以随机顺序出现&#xff0c;你正好雇用一次的概率是多少&#xff1f;正好雇用 n 次的概率是多少? 文心一言&#xff1a; 讯飞星火&#xff1a; 华为盘古&#xff1a; 在HIRE-ASSISTANT中&#xff0c;假设应聘者以随机顺序出现…

仙境传说RO:从零开始编译服务端开发环境搭建安装Pandas-rAthena

仙境传说RO&#xff1a;从零开始编译服务端开发环境搭建安装Pandas-rAthena 大家好&#xff0c;我是艾西今天跟大家分享下仙境传说RO 开发脚本环境搭建。 Pandas是RO的模拟器实际上是开源的一个叫做rAthenna的一个开源项目 准备工具&#xff1a; Git 2.25.0 Setup建议放入D盘…

【消息队列】| 队列的优势介绍及应用场景

目录 &#x1f981; 前言&#x1f981; 那么MQ的优势在哪里&#xff1f;&#x1f981; 应用场景&#x1f981; 最后 &#x1f981; 前言 消息队列&#xff1a;MQ全称Message Queue&#xff08;消息队列&#xff09;&#xff0c;是在消息的传输过程中保存消息的容器。多用于系统…

javaweb课程设计——商城项目

前言&#xff1a; &#x1f44f;作者简介&#xff1a;我是笑霸final&#xff0c;一名热爱技术的在校学生。 &#x1f4dd;个人主页&#xff1a;个人主页1 || 笑霸final的主页2 &#x1f4d5;系列专栏&#xff1a;项目专栏 &#x1f4e7;如果文章知识点有错误的地方&#xff0c;…

2.2 动态范围的常用计算方法

1. 动态范围的常用计算方法 动态范围(Dynamic Range)指的是输入数据中数值的范围&#xff0c;计算动态范围是为了确定量化时使用的比特位数(还是抽象&#x1f602;)。个人理解:考虑到输入数据可能存在数据分布不均&#xff0c;即有些数据偏离过大。而过大的偏离值&#xff0c;会…

Ansys Zemax | NSC 非序列矢高图用户分析

本文介绍如何使用 NSC 矢高图用户分析功能在非序列模式下测量和显示对象的矢高。了解此功能的基础知识&#xff0c;包括如何设置复杂 CAD 零件的文件以获取特定面的矢高值。&#xff08;联系我们获取文章附件&#xff09; 介绍 OptocStudio 的序列模式具有表面矢高分析功能&…

硬件系统工程师宝典(28)-----关于LDO,应该知道的事

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。上篇我们说到BJT配合MOSFET控制电源开关的四种电路以及MOSFET的均流电路。今天我们来讲讲LDO的应用分析。 LDO的结构 LDO&#xff08;Low Dropout R…

Linux内核源码的配置和编译

目录 配置交叉编译工具链 读README 配置内核源码支持当前的硬件平台 驱动配置 内核编译 编译&#xff1a; 问题&#xff1a; 解决问题的方法&#xff1a; 测试内核 配置交叉编译工具链 打开内核源码顶层目录的Makefile&#xff0c; hqUbuntu:~/fs6818_uboot/kernel-3.4.39$ vi …