zoukankan      html  css  js  c++  java
  • 经典算法详解(12)分解质因数

    题目:众所周知,任何一个合数(因数不止是1和本身)都可以写成几个质数相乘的形式,这几个质数叫做这个合数的质因数。例如,24=2×2×2×3.把一个合数写成几个质数相乘的形式叫做分解质因数。对于一个质数,他的质因数可定义为它本身。编写一个程序实现分解质因数。

    C++实现

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5 int isPrime(int n) {
     6     for (int i = 2; i < n; i++) {
     7         if (n%i == 0)
     8             return 0;
     9     }
    10     return 1;
    11 }
    12 
    13 int getPrimeFactor(int n) {    //可以不返回值,此处返回-1表示出错,返回1表示正常。
    14     if (n < 2)
    15         return -1;
    16     if (isPrime(n)) {
    17         cout << n << "	";
    18         return 1;
    19     }
    20     else {
    21         for (int i = 2; i < n; i++) {
    22             if (n%i == 0) {
    23                 cout << i << "	";
    24                 getPrimeFactor(n / i);
    25                 break;
    26             }
    27         }
    28     }
    29     return 1;
    30 }
    31 
    32 int main(int argc, char *argv[]) {
    33     int a;
    34     cin >> a;
    35     getPrimeFactor(a);
    36     getchar();
    37     getchar();
    38     return 0;
    39 }

    思路:首先编写一个函数用于判断一个数是否是质数,其次利用递归的方法,把一个数除以它最小的质因数的之后的值又是一个要质因数分解的值,问题相同规模缩小,所以是一个递归问题,终止条件是该数是一个质数。当是质数或者找到一个最小的质因数时都将其打印出来即可。

  • 相关阅读:
    打印一个0到1之间的数的二进制表示
    bzoj-3223 文艺平衡树
    Linux下使用fstatfs/statfs查询系统相关信息
    Pku3664
    hdu-2544 最短路
    java同步包种ArrayBlockingQueue类的分析与理解
    【剑指offer】不用加减乘除做加法
    PA模块经常使用表
    网络编程
    // 插入排序 源代码
  • 原文地址:https://www.cnblogs.com/ys99/p/9322793.html
Copyright © 2011-2022 走看看