【NOIP普及组】质因数分解

news/2024/11/8 16:23:00 标签: 算法, 数据结构, C++, C语言, JAVA

【NOIP普及组】质因数分解

      • C语言代码
      • C++代码
      • Java代码
      • Python代码


💐The Begin💐点点关注,收藏不迷路💐

已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数。

输入

输入只有一行,包含一个正整数 n。

输出

输出只有一行,包含一个正整数 p,即较大的那个质数。

样例输入

21

样例输出

7

提示

【数据范围】
对于 60%的数据,
6≤n≤1000。
对于 100%的数据,
6≤n≤2∗10^9 。

C语言代码

#include <stdio.h>
#include <math.h>

int main() {
    int n;  // 存储输入的正整数
    scanf("%d", &n);  // 读取输入的正整数

    int maxPrime = 0;  // 用于存储较大的质数,初始化为0

    // 从2开始遍历到n的平方根,因为一个数的因数不会超过它的平方根
    for (int i = 2; i <= sqrt(n); i++) { 
        if (n % i == 0) {  // 如果i是n的因数
            int otherFactor = n / i;  // 计算另一个因数

            // 判断i和另一个因数是否都是质数
            int isIprime = 1;
            for (int j = 2; j <= sqrt(i); j++) {
                if (i % j == 0) {
                    isIprime = 0;
                    break;
                }
            }

            int isOtherFactorPrime = 1;
            for (int j = 2; j <= sqrt(otherFactor); j++) {
                if (otherFactor % j == 0) {
                    isOtherFactorPrime = 0;
                    break;
                }
            }

            // 如果i和另一个因数都是质数,更新较大的质数
            if (isIprime && isOtherFactorPrime) {
                maxPrime = (i > otherFactor)? i : otherFactor;
            }
        }
    }

    printf("%d\n", maxPrime);  // 输出较大的质数

    return 0;
}

C++代码

#include <iostream>
#include <cmath>

int main() {
    int n;  // 存储输入的正整数
    std::cin >> n;  // 读取输入的正整数

    int maxPrime = 0;  // 用于存储较大的质数,初始化为0

    // 从2开始遍历到n的平方根,因为一个数的因数不会超过它的平方根
    for (int i = 2; i <= std::sqrt(n); i++) { 
        if (n % i == 0) {  // 如果i是n的因数
            int otherFactor = n / i;  // 计算另一个因数

            // 判断i和另一个因数是否都是质数
            bool isIprime = true;
            for (int j = 2; j <= std::sqrt(i); j++) {
                if (i % j == 0) {
                    isIprime = false;
                    break;
                }
            }

            bool isOtherFactorPrime = true;
            for (int j = 2; j <= std::sqrt(otherFactor); j++) {
                if (otherFactor % j == 0) {
                    isOtherFactorPrime = false;
                    break;
                }
            }

            // 如果i和另一个因数都是质数,更新较大的质数
            if (isIprime && isOtherFactorPrime) {
                maxPrime = (i > otherFactor)? i : otherFactor;
            }
        }
    }

    std::cout << maxPrime << std::endl;  // 输出较大的质数

    return 0;
}

Java代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();  // 读取输入的正整数

        int maxPrime = 0;  // 用于存储较大的质数,初始化为0

        // 从2开始遍历到n的平方根,因为一个数的因数不会超过它的平方根
        for (int i = 2; i <= Math.sqrt(n); i++) { 
            if (n % i == 0) {  // 如果i是n的因数
                int otherFactor = n / i;  // 计算另一个因数

                // 判断i和另一个因数是否都是质数
                boolean isIprime = true;
                for (int j = 2; j <= Math.sqrt(i); j++) {
                    if (i % j == 0) {
                        isIprime = false;
                        break;
                    }
                }

                boolean isOtherFactorPrime = true;
                for (int j = 2; j <= Math.sqrt(otherFactor); j++) {
                    if (otherFactor % j == 0) {
                        isOtherFactorPrime = false;
                        break;
                    }
                }

                // 如果i和另一个因数都是质数,更新较大的质数
                if (isIprime && isOtherFactorPrime) {
                    maxPrime = (i > otherFactor)? i : otherFactor;
                }
            }
        }

        System.out.println(maxPrime);  // 输出较大的质数

        scanner.close();
    }
}

Python代码

import math

n = int(input())  # 读取输入的正整数

maxPrime = 0  # 用于存储较大的质数,初始化为0

# 从2开始遍历到n的平方根,因为一个数的因数不会超过它的平方根
for i in range(2, int(math.sqrt(n)) + 1): 
    if n % i == 0:  # 如果i是n的因数
        otherFactor = n // i  # 计算另一个因数

        # 判断i和另一个因数是否都是质数
        isIprime = all(i % j!= 0 for j in range(2, int(math.sqrt(i)) + 1))
        isOtherFactorPrime = all(otherFactor % j!= 0 for j in range(2, int(math.sqrt(otherFactor)) + 1))

        # 如果i和另一个因数都是质数,更新较大的质数
        if isIprime and isOtherFactorPrime:
            maxPrime = max(i, otherFactor)

print(maxPrime)  # 输出较大的质数

在这里插入图片描述


💐The End💐点点关注,收藏不迷路💐

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

相关文章

React.lazy() 懒加载

概要 React.lazy() 是 React 16.6 引入的一个功能&#xff0c;用于实现代码分割&#xff08;code splitting&#xff09;。它允许你懒加载组件&#xff0c;即在需要时才加载组件&#xff0c;而不是在应用初始加载时就加载所有组件。这种方法可以显著提高应用的性能&#xff0c…

基于Springboot+Vue的网上课程学习系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 该系统…

植物神经功能紊乱?这些维生素或许能帮到你!

植物神经功能紊乱&#xff0c;这个听起来有些陌生的名词&#xff0c;实际上却是一种常见的内脏功能失调综合征。它可能与心理、遗传、疾病等多种因素有关&#xff0c;表现为多个系统的症状&#xff0c;如睡眠障碍、心悸、头痛、胸闷、多汗等&#xff0c;严重影响了患者的生活质…

C语言实现数据结构之堆

文章目录 堆一. 树概念及结构1. 树的概念2. 树的相关概念3. 树的表示4. 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 二. 二叉树概念及结构1. 概念2. 特殊的二叉树3. 二叉树的性质4. 二叉树的存储结构 三. 二叉树的顺序结构及实现1. 二叉树的顺序结构2.…

linux rocky 9.4部署和管理docker harbor私有源

文章目录 Harbor简介安装Harbor技术细节1.安装系统(略),设置主机名和IP2.安装docker3.安装docker-compose4.安装Harbor私有源仓库5 测试登录1.本机登录2.客户端登录Harbor服务器配置docker源1. 下载镜像2.把镜像上传到Harbor私有仓库源3.客户端下载镜像,并且启动容器linux …

简单分享一下淘宝商品数据自动化抓取的技术实现与挑战

在电子商务领域&#xff0c;数据是驱动决策的关键。淘宝作为国内最大的电商平台之一&#xff0c;其商品数据对电商从业者来说具有极高的价值。然而&#xff0c;从淘宝平台自动化抓取商品数据并非易事&#xff0c;涉及多重技术和法律挑战。本文将从技术层面分析实现淘宝商品数据…

如何选择最适合的消息队列?详解 Kafka、RocketMQ、RabbitMQ 的使用场景

引言 在日常开发中&#xff0c;消息队列已经成为业务场景中几乎不可或缺的一部分。无论是订单系统、日志收集、分布式事务&#xff0c;还是大数据实时流处理&#xff0c;消息队列都在支撑着这些关键环节。目前市面上常用的消息队列有三种(ActiveMQ 虽然在企业集成中仍有应用&a…

【ddnsgo+ipv6】

ddnsgoipv6 DNS解析添加记录ddnsgo配置 DNS解析添加记录 ddnsgo配置