首页 > 其他分享 >素数之积 - 华为OD统一考试(C卷)

素数之积 - 华为OD统一考试(C卷)

时间:2024-03-14 12:58:05浏览次数:22  
标签:prime return r2 int OD 之积 素数 华为 num

OD统一考试(C卷)

分值: 100分

题解: Java / Python / C++

alt

题目描述

RSA加密算法只在网络安全世界中无处不在,它利用了极大整数因数分解的困难度,数据越大,安全系数越高,给定一个32 位正整,请对其进行因数分解,找出是哪两个素数的乘积。

输入描述

一个正整数num( 0 < n u m < 2 32 0 \lt num \lt 2^{32} 0<num<232)

输出描述

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

示例1

输入:
15

输出:
3 5

示例2

输入:
27

输出:
-1 -1

题解

这道题目是一个简单的数学题

解题思路

  1. 编写一个函数来判断一个数是否为素数。
  2. 对输入的正整数进行因数分解,从小到大枚举因子 k,如果 k 是素数且 num / k 也是素数,则输出 k 和 num / k。
  3. 如果找不到符合条件的因子,则输出 -1, -1。

Java

import java.util.Scanner;
/**
 * @author code5bug
 */
public class Main {
    // 判断 n 是否为素数
    static boolean isPrime(int n) {
        if (n < 2) {
            return false;
        }

        for (int i = 2; i <= Math.sqrt(n) + 1; i++) {
            if (n % i == 0) {
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int num = scanner.nextInt();

        int r1 = -1, r2 = -1;
        for (int k = 2; k < Math.sqrt(num) + 1; k++) {
            // 枚举因子 k, 如果 k 为素数且 num / k 为素数,则记录结果 k 和 num / k 并退出。
            if (num % k == 0 && isPrime(k) && isPrime(num / k)) {
                r1 = k;
                r2 = num / k;
                break;
            }
        }

        System.out.println(r1 + " " + r2);
    }
}

Python

import math


def is_prime(n) -> bool:
    """
    判断 n 是否为素数
    :param n:
    :return:
    """
    if n < 2:
        return False
    for i in range(2, int(math.sqrt(n)) + 1):
        if n % i == 0:
            return False
    return True


def solve(num: int):
    sq = int(math.sqrt(num) + 1)
    # 枚举因子 k, 如果 k 为素数且 num // k 为素数,则输出 k 和 num // k 。
    for k in range(2, sq + 1):
        if num % k == 0 and is_prime(k) and is_prime(num // k):
            print(k, num // k)
            return

    print(-1, -1)


if __name__ == "__main__":
    solve(int(input()))

C++

#include <bits/stdc++.h>
using namespace std;

// 判断 n 是否为素数
bool is_prime(int n)
{
    if (n < 2) {
        return false;
    }

    for (int i = 2; i <= sqrt(n) + 1; i++) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
}

int main()
{
    int num;
    cin >> num;

    int r1 = -1, r2 = -1;
    for (int k = 2; k < sqrt(num) + 1; k++) {
        # 枚举因子 k, 如果 k 为素数且 num // k 为素数,则记录结果 k 和 num // k 并退出。
        if (num % k == 0 && is_prime(k) && is_prime(num / k)) {
            r1 = k;
            r2 = num / k;
            break;
        }
    }

    cout << r1 << " " << r2 << endl;
    return 0;
}
    

‍❤️‍华为OD机试面试交流群每日真题分享): 加V时备注“华为od加群”

标签:prime,return,r2,int,OD,之积,素数,华为,num
From: https://blog.csdn.net/user_longling/article/details/136703031

相关文章

  • 华为OD技术C卷“测试用例执行计划”Java解答
    描述示例算法思路1整体思路是,先读取特性的优先级和测试用例覆盖的特性列表,然后计算每个测试用例的优先级,并将其与测试用例的索引存储到二维数组中。最后按照优先级和索引排序,输出测试用例的索引,即为执行顺序。 首先从标准输入中读取了两个整数n和m,分别表示特性的数......
  • Node.js毕业设计办公用品管理系统(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着信息技术的飞速发展,企业对于办公效率和资源管理的要求越来越高。传统的办公用品管理方式主要依赖人工记录和统计,这种方式不仅效率低下,而且容易出现错误......
  • Node.js毕业设计办公用品管理系统(Express)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:在现代办公环境中,办公用品的管理是一个不可忽视的环节。传统的管理方式通常依赖于人工记录和统计,不仅效率低下,而且容易出错。随着信息技术的发展,越来越多的......
  • 关于java.net.URLEncoder.encode()将空格转成+问题
    1.情景展示如上图所示,当我们使用jdk自带的类对数据进行URL编码时,空格会被转成+。这其实是不对的,我们知道:空格对应url编码是:%20,所以,jdk自带的URLEncoder将空格转成+是不对的。如何解决?2.解决方案既然jdk自带的URLEncoder有问题,我们就有两种解决办法。一种是仍然使用它,然......
  • 2024-03-07-Nodejs(1-Node基础)
    1.初识Nodejs1.1思考为什么js可以在浏览器中被执行?浏览器中具备js解析引擎,其中chrome浏览器的v8引擎最优。为什么js可以操作DOM和BOM?每个浏览器都内置了DOM和BOM这样的api函数,因此浏览器中的js才可以调用它们。js运行环境运行环境是指代码正常运行所必须的环境。......
  • 2024-03-11-Nodejs(3-数据库与身份验证)
    3.数据库与身份验证3.1数据库基本概念数据库是用来组织、存储和管理数据的仓库;传统数据库中,数据结构分为数据库(database)、数据表(table)、数据行(tow)、字段(field)四大部分。3.2配置mysql模块安装mysql模块npminstallmysql建立连接constmysql=require('mysql')......
  • 2024-03-08-Nodejs(2-Express)
    2.Express​ 基于Node.js平台,快速、开放、极简的Web开发框架,Express是用于快速创建服务器的第三方模块。2.1基本使用#安装expressnpminstallexpressconstexpress=require("express");//创建web服务器constapp=express();//监听客户端的GET和POST......
  • 2024-03-11-Nodejs(4-大事件项目)
    4.大事件项目4.1项目初始化项目整体架构图大事件项目 |--- db | |---index.js |---router | |---user.js |---router_handler | |---user.js |---schema | |---user.js |---app.js |---config.js4.1.1创建项目新建api_server文件夹作为项目......
  • vscode常用快捷键
    一、vscode的常用快捷键1、注释:a)单行注释:[ctrl+k,ctrl+c]或ctrl+/b)取消单行注释:[ctrl+k,ctrl+u](按下ctrl不放,再按k+u)c)多行注释:[alt+shift+A]d)多行注释:/**2、移动行:alt+up/down3、显示/隐藏左侧目录栏 ctrl+b4、复制当前行:shift+alt......
  • MongoDB数据库之主从复制配置实战【转】
    一、MongoDB介绍 1.1MongoDB简介MongoDB是一个开源的文档数据库,使用JSON格式存储和操作数据,具有高度灵活性和可扩展性。MongoDB的数据模型是面向文档的,这意味着它可以存储各种类型的数据,如数组、嵌套文档和二进制数据。MongoDB是一种NoSQL数据库,不需要使用传统的表格结构。M......