质因数分解

GitHub跳转原题关系图返回列表

从小到大寻找第一个因子,利用两个不同质因子的乘积性质得到较大质数。

OJ: noi_openjudge

题目 ID: ch0105-43

难度:普及-

标签:数学枚举质数python

日期: 2026-07-30 23:01

题意

已知正整数 nn 是两个不同质数的乘积,输出其中较大的质数。

思路

22 开始寻找能整除 nn 的最小因子。因为 nn 恰好是两个不同质数的乘积,这个最小因子就是较小质数,另一个因子 number // divisor 就是答案。

只需检查到 divisor * divisor <= number;若两个因子都大于平方根,它们的乘积会超过 nn

代码

Python代码

python
number = int(input())
divisor = 2

while divisor * divisor <= number:
    if number % divisor == 0:
        print(number // divisor)
        break
    divisor += 1

C++代码

cpp
#include <cstdio>
#include <cmath>

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


int main(){
    int n;
    scanf("%d",&n);
    int i;
    for (i=1;i<=n;i++){
        if( n % i == 0 && is_prime(i)){
            int a = n / i;
            if( is_prime(a)){
                printf("%d\n",a);
                return 0;
            }
        }
    }
    return 0;
}

复杂度

最坏情况下枚举到 n\sqrt n,时间复杂度为 O(n)O(\sqrt n),额外空间复杂度为 O(1)O(1)

总结

已知乘积结构时,找到一边的因子就能用整除立即得到另一边。