【编程题目 |100分】素数之积【2021 H2, 2022 Q1 考试题 2024 Q1考试题 C卷】


时间限制:C/C++ 1秒,其他语言 2秒

空间限制:C/C++262144K,其他语言524288K

64bit IO Format:%lld


本题可使用本地IDE编码,不能使用本地已有代码,无跳出限制,

编码后请点击”保存并调试“按钮进行代码提交。


题目描述

【素数之积】

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

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

输入描述

一个正整数num

0 < num <= 2147483647

输出描述

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


C++解法一


#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

bool isPrime_3( int num )
{
    if(num == 2|| num== 3 )
        return true;
    if(num % 6 != 1 && num % 6 != 5)
        return false;
    int tmp = sqrt(num);
    for(int i = 5;i <= tmp; i += 6 )
        if(num % i == 0|| num % (i+2) == 0 )
            return false;
    return true ;
}

剩余50%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

C++解法二


#include <iostream>
#include <vector>
#include <cmath>

using namespace std;

剩余50%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JAVA


import java.util.*;

public class Prime {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long num = sc.nextLong();
        long limit = (long) Math.floor(Math.sqrt(num));

剩余50%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

JavaScript


剩余50%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看

Python


def check(nums):
    for i in range(2, int(nums ** 0.5) + 1):
        if nums % i == 0:
            return False
    return True

剩余50%内容,购买单篇文章或订阅会员后查看


隐藏内容

此处内容需要权限查看

  • 普通用户特权:11金币
  • 会员用户特权:免费
  • 永久会员用户特权:免费推荐
会员免费查看