华为机考题(一):质数因子

题目描述

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举),最后一个数后面也要有空格。

输入描述

输入一个 long 型正整数。

输出描述

按照从小到大的顺序输出它的所有质因子的字符串,以空格隔开。

示例

输入:

text

复制代码
180

输出:

text

复制代码
2 2 3 3 5 

说明: 180 = 2 × 2 × 3 × 3 × 5


C 语言解决方案

思路

从小到大枚举因子 i(从 2 开始):

  1. 只要 n 能被 i 整除,就输出 i,并令 n /= i,重复直到不能整除。

  2. 枚举到 i * i > n 时停止。若此时 n > 1,说明 n 本身是一个质因子,直接输出。

关键优化: 循环条件用 i * i <= n,可将复杂度从 O(n) 降到 O(√n)。

代码实现

c

复制代码
#include <stdio.h>

int main(void) {
    long n;
    scanf("%ld", &n);

    // 枚举因子,i * i <= n 是核心优化
    for (long i = 2; i * i <= n; i++) {
        while (n % i == 0) {
            printf("%ld ", i);
            n /= i;
        }
    }

    // 若剩余部分 > 1,则它本身是质因子
    if (n > 1) {
        printf("%ld ", n);
    }

    printf("\n");
    return 0;
}
相关推荐
KevinChaos5 小时前
阳台小花园开发手记 03|HarmonyOS 7.0 互动卡片:叶片伸出边框仍与花盆对齐
华为·harmonyos
lisw056 小时前
Dayhoff的PAM替换矩阵理论评介!
线性代数·算法·矩阵
熬夜磕代码丶6 小时前
RN鸿蒙空间音频实战
华为·音视频·harmonyos
行者-全栈开发6 小时前
【鸿蒙心迹】通知与推送集成——emitter 本地通知与推送服务全链路(HarmonyOS 7.x)
华为·harmonyos
一起学安全技术7 小时前
拆大模型 03|注意力的一句话版本:不用论文讲清 Attention
深度学习·算法·语言模型·transformer
Nerd(BUG版)7 小时前
鸿蒙API18~26新增V2组件全解析
microsoft·华为·harmonyos
Felven7 小时前
华为鲲鹏920s芯片serdestool工具使用说明
linux·运维·服务器·华为·鲲鹏920·serdestool
Delightrs8 小时前
Rust LeetCode238 算法题解
开发语言·算法·rust
自信150413057598 小时前
重生之从0开始学习c++之——vector-中篇
c++·学习·算法