素数之积/RSA加密算法(C语言)

news/2024/7/20 18:49:46 标签: c语言, 算法, 数据结构, 华为od

题目来自于博主算法大师的专栏:最新华为OD机试C卷+AB卷+OJ(C++JavaJSPy) https://blog.csdn.net/banxia_frontend/category_12225173.html

题目描述

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

输入描述

一个正整数num,0 < num <= 2147483647

输出描述

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

用例

输入

15

输出

3 5

输入

27

输出

-1 -1

代码

#include <stdio.h>
#include <stdlib.h>

// 定义一个判断整数是否为素数的函数
int isPrime(int n) {
    // 对于小于等于3的数,只有2和3是素数
    if (n <= 3) {
        return n > 1;
    }
    // 遍历从2到sqrt(n),检查是否有能被n整除的数
    for (int i = 2; i * i <= n; i++) {
        // 如果找到一个能整除n的数i,则该数不是素数
        if (n % i == 0) {
            return 0;
        }
    }
    // 若遍历结束后未找到能整除n的数,则n是素数
    return 1;
}

int main() {
    int num;           // 定义变量num存储用户输入的32位正整数
    scanf("%d", &num); // 读取用户输入的整数

    // 判断num本身是否为素数,如果是素数则无法进行因数分解
    if (isPrime(num)) {
        printf("-1 -1\n"); // 输出分解失败标识
        return 0;          // 结束程序
    }

    // 遍历可能的因子,寻找合适的两个素数因子
    for (int i = 2; i * i <= num; i++) {
        // 如果当前数i能整除num
        if (num % i == 0) {
            int j = num / i; // 计算另一个因子j
            // 检查i和j是否都是素数
            if (isPrime(i) && isPrime(j)) {
                // 如果两者均为素数,则输出分解结果(按升序排列)
                printf("%d %d\n", i < j ? i : j, j > i ? j : i);
                return 0; // 结束程序
            }
        }
    }

    // 如果循环结束仍未找到合适的素数因子,则输出分解失败标识
    printf("-1 -1\n");
    return 0; // 结束程序
}

文章目录

    • 题目描述
    • 输入描述
    • 输出描述
    • 用例
    • 代码


http://www.niftyadmin.cn/n/5393884.html

相关文章

【leetcode每日一题】【滑动窗口长度固定】案例

567. 字符串的排列 长度不变 给你两个字符串 s1 和 s2 &#xff0c;写一个函数来判断 s2 是否包含 s1 ****的排列。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 换句话说&#xff0c;s1 的排列之一是 s2 的 子串 思路&#xff1a;s1长度固定的窗…

【BUG 记录】MyBatis-Plus 处理枚举字段和 JSON 字段

【BUG 记录】MyBatis-Plus 处理枚举字段和JSON字段 一、枚举字段&#xff08;mysql环境已测、postgresql环境已测&#xff09;1.1 场景1.2 定义枚举常量1.3 配置枚举处理器1.4 测试 二、JSON字段&#xff08;mysql环境已测&#xff09;2.1 导包2.2 使用对象接受2.3 测试 三、JS…

Llama中文大模型-模型+工具(外延能力)

除了持续增强大模型内在的知识储备、通用理解、逻辑推理和想象能力等&#xff0c;未来&#xff0c;我们也会不断丰富大模型的外延能力&#xff0c;例如知识库检索、计算工具、WolframAlpha、操作软件等。 我们首先集成了LangChain框架&#xff0c;可以更方便地基于Llama2开发文…

【linux】linux查看某个已经启动进程的环境变量及命令行信息 /proc/${pid}/environ cmdline

随便找一个进程 yeqiangyeqiang-MS-7B23:~$ ps aux | grep Vir yeqiang 3538 0.4 0.6 1797056 210332 ? Sl 08:38 0:06 /usr/lib/virtualbox/VirtualBox 查看命令行 yeqiangyeqiang-MS-7B23:~$ strings /proc/3538/cmdline /usr/lib/virtualbox/VirtualBox …

matlab simulink永磁同步电机pid控制

1、内容简介 略 53-可以交流、咨询、答疑 2、内容说明 略 摘 要 19世纪90年代&#xff0c;美国西屋电气公司研制出了世界上第一台交流同步电机。随着科学技术的迅猛发展和生产工艺的持续进步&#xff0c;在20世纪50年代出现了永磁同步电机。它以永磁体代替电励磁绕组&#…

球虫标注教程

1 安装标注工具 解压下载的安装包到指定目录&#xff0c;如下图所示&#xff1a; 2 启动标注工具Labelme 在此安装目录下&#xff0c;[长按键盘的Shift键 鼠标右键]弹出如下窗口&#xff0c;如图所示&#xff1a; 然后点击在此处打开Powershell窗口&#xff08;s&#x…

@Valid 和 @Validated 注解用法详解

大部分参考以下链接 Valid 和 Validated 注解用法详解 本地实践 分组校验Validated(Group1.class) ValidDTO validDTO Controller RequestMapping(value "/valid") public class ValidController {RequestMapping(value "/update")ResponseBody//分组…

JavaSec 基础之 SQL 注入

文章目录 JDBC 注入语句拼接(Statement)修复方案 语句拼接(PrepareStatement)修复方案 预编译 JdbcTemplate修复方案 MyBatisLike 注入Order By 注入In 注入 寒假学了一个月 pwn&#xff0c;真心感觉这玩意太底层学的我生理不适应了&#xff0c;接下来学一段时间 java 安全缓一…