7.C++经典实例-分解质因数

在C++中实现分解质因数的功能可以通过以下步骤完成:

  1. 定义一个函数:用于接收一个整数,并返回其所有质因数。
  2. 处理2作为质因数的情况:因为2是最小的质数,首先检查给定的数是否能被2整除,如果可以,则2是一个质因数,记录下来,并将原数除以2,重复此过程直到不能被2整除为止。
  3. 处理大于2的质因数:从3开始,每次增加2(即只考虑奇数),检查当前数是否为质因数。如果是,则记录下来,并将原数除以此质因数,重复此过程直到不能被当前数整除为止。
  4. 处理特殊情况:如果最后剩下的数大于2,那么这个数本身也是一个质因数。
cpp 复制代码
#include <iostream>
#include <vector>

// 声明一个返回质因数的函数,先声明之后,就可以在主程序main()中使用了,如果不想用声明的方法,可以直接将函数写到main前面,否则无法在main中进行调用
std::vector<int> primeFactors(int n);

int main() {
    int number;
    std::cout << "请输入一个正整数: ";
    std::cin >> number;

    std::vector<int> factors = primeFactors(number);
    std::cout << "质因数有: ";
    for(int i=0; i < factors.size();i++){
        if(i>0)
        {
			 std::cout << "*" << " ";
		}
        std::cout << factors[i]<< " ";
    }
    std::cout << std::endl;

    return 0;
}

// 函数定义
std::vector<int> primeFactors(int n) {
    std::vector<int> factors;
    // 处理2作为质因数的情况
    while (n % 2 == 0) {
        factors.push_back(2);
        n /= 2;
    }
    // 处理大于2的质因数
    for (int i = 3; i * i <= n; i += 2) {
        while (n % i == 0) {
            factors.push_back(i);
            n /= i;
        }
    }
    // 如果n大于2,说明n本身是一个质数
    if (n > 2) {
        factors.push_back(n);
    }
    return factors;
}

我们看一下输出结果:

如果函数不用先声明的情况下,我们改一下程序:

cpp 复制代码
#include <iostream>
#include <vector>

int main() {
    int number;
    std::cout << "请输入一个正整数: ";
    std::cin >> number;

    std::vector<int> factors = primeFactors(number);
    std::cout << "质因数有: ";
    for(int i=0; i < factors.size();i++){
        if(i>0)
        {
			 std::cout << "*" << " ";
		}
        std::cout << factors[i]<< " ";
    }
    std::cout << std::endl;

    return 0;
}

// 函数定义
std::vector<int> primeFactors(int n) {
    std::vector<int> factors;
    // 处理2作为质因数的情况
    while (n % 2 == 0) {
        factors.push_back(2);
        n /= 2;
    }
    // 处理大于2的质因数
    for (int i = 3; i * i <= n; i += 2) {
        while (n % i == 0) {
            factors.push_back(i);
            n /= i;
        }
    }
    // 如果n大于2,说明n本身是一个质数
    if (n > 2) {
        factors.push_back(n);
    }
    return factors;
}

执行时就会显示有错误,提示这个函数没有定义,

这个时候,我们就得把函数定义到main之前。

cpp 复制代码
#include <iostream>
#include <vector>

// 函数定义
std::vector<int> primeFactors(int n) {
    std::vector<int> factors;
    // 处理2作为质因数的情况
    while (n % 2 == 0) {
        factors.push_back(2);
        n /= 2;
    }
    // 处理大于2的质因数
    for (int i = 3; i * i <= n; i += 2) {
        while (n % i == 0) {
            factors.push_back(i);
            n /= i;
        }
    }
    // 如果n大于2,说明n本身是一个质数
    if (n > 2) {
        factors.push_back(n);
    }
    return factors;
}
int main() {
    int number;
    std::cout << "请输入一个正整数: ";
    std::cin >> number;

    std::vector<int> factors = primeFactors(number);
    std::cout << "质因数有: ";
    for(int i=0; i < factors.size();i++){
        if(i>0)
        {
			 std::cout << "*" << " ";
		}
        std::cout << factors[i]<< " ";
    }
    std::cout << std::endl;

    return 0;
}

又可以愉快的执行了

相关推荐
不定积分要+C_yyy13 分钟前
Java基础核心精讲:基本数据类型与包装类区别、自动装箱拆箱与缓存陷阱实战解析
java·开发语言
xingxiliang15 分钟前
ReliableAgent:类似工程级可用的agent示例
java·开发语言·agent
buhuizhiyuci30 分钟前
【python篇——一周速通python语法】python的基础语法操作
开发语言·python
xyy12331 分钟前
C# Polly 弹性策略库指南
算法
郝学胜-神的一滴35 分钟前
中级OpenGL教程 020:巧用数组与循环实现多点点光源渲染,告别冗余代码重构方案
c++·unity·游戏引擎·godot·图形渲染·unreal
程序猿编码40 分钟前
没有AI框架,没有GPU,一个C语言文件跑通大模型
c语言·开发语言·人工智能·深度学习·ai·大模型
zmzb01031 小时前
C++课后习题训练记录Day160
开发语言·c++
沫璃染墨1 小时前
现代C++⊂C++11篇(一)列表初始化全解 & std::initializer_list
开发语言·c++
阿米亚波1 小时前
【C++ STL】std::forward_list
开发语言·c++·笔记·stl·visual studio·forward_list
buhuizhiyuci1 小时前
【python篇——一周速通python语法】python的条件语句和循环语句
开发语言·python