美文网首页
算法笔记_03:蓝桥杯练习 分解质因数

算法笔记_03:蓝桥杯练习 分解质因数

作者: 虾菠萝 | 来源:发表于2017-03-08 09:21 被阅读743次

这是我第一次自己写的,思考的递归程序,看起来有些繁琐。


1. 问题描述

<blockquote>
  将一个正整数N(N∈[1,32768])分解质因数,把质因数按从小到大的顺序输出。最后输出质因数的个数。
输入格式
  一行,一个正整数
输出格式
  两行,第一行为用空格分开的质因数
  第二行为质因数的个数
样例输入
66
样例输出
2 3 113
样例输入
90
样例输出
2 3 3 5
4
样例输入
37
样例输出
37
1
</blockquote>
<p>


2. 解决方案

<pre> <big>
note1.起初我想用Set存,能到不重复的质因子,不满足题目要求。
note2.这道题,应用递归的方法。找入口,找出口。
note3.大神的c语言编写的代码,思想与我的有相通之处:
  他是先取得所有小于待分解数的质数,我是每次都从质数2开始找质因子,但我门都是要进行递归求质因数。
  <a href="#dest">分解质因数2</a>
note4.以整数举例画图,感觉类似图的深度搜索,待验证!!

分解90的质因数.png
</big></pre>
<u>实现java代码1</u>
import java.util.ArrayList;
import java.util.Scanner;

public class 分解质因数 {
    ArrayList<Integer> prime = new ArrayList<Integer>();    //存放质因数列表

    public boolean isPrime(int k) { //判断质数
        if (k == 1 || k == 0)
            return false;
        int i = 0;
        for (i = 2; i <= k / 2; i++) {
            if (k % i == 0)
                return false;
        }

        return true;
    }

    public ArrayList<Integer> divide(int num, int start) {  //num--当前待分解的数,start--最小的可最为因子的质数
        if (num == 1)           //递归出口:当为1,退到入口处
            return prime;

        if (num == 2) {
            prime.add(num);     //最小的待分解的数,可以直接加入,然后完成。
            // return prime;
        }

        for (int i = start; i < num; i++) {
            if (isPrime(num)) {     //如果待分解的数为质数,直接加入
                prime.add(num);
                return prime;       //递归出口:退到入口处
            } else {
                if (isPrime(i)) {
                    // System.out.println(i);
                    int temp = num % i;     //余数
                    if (temp == 0) {
                        prime.add(i);   //说明i为质因子,将i加入。
                        num = num / i;
                        if (num == i) {
                            prime.add(i);   //当存在num==i时,重复加入i;
                        } else {
                            divide(num, i);  //递归新的待分解的数
                            // prime.add(num);
                            return prime;
                        }

                    }
                }
            }
        }

        return prime;
    }

    public static void main(String[] args) {
        分解质因数 test = new 分解质因数();
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        /*
         * if(test.isPrime(m)) { System.out.println("ye"); }
         */
        // System.out.println(test.divide(m, 2).size());
        ArrayList<Integer> prime = test.divide(m, 2);
        for (int i = 0; i < prime.size(); i++) {
            System.out.print(prime.get(i) + " ");
        }
        System.out.println();
        System.out.println(prime.size());
    }
}

<p></p>
<u>实现C++代码<a name="dest">2</a></u>

#include<iostream>
#include<cmath>

using namespace std;

int zs[10001];
int k;

//递归求因数
string pri(int m){
    if(m==1) return "";
    for(int i=0;i<k;i++){
        if(m%zs[i]==0){
            cout<<zs[i];
            if(m/zs[i]!=1) cout<<"*";
            return pri(m/zs[i]);
        }
    }
}

//筛选出质数
void zhishu(int a,int b){
    int i,j;
    k=0;
    for(i=2;i<=b;i++){
        int s=sqrt(i);
        for(j=2;j<=s;j++)
            if(i%j==0) break;
        if(j>s){
            zs[k]=i;
            k++;
        }
    }
}

int main(){
    int a,b;
    cin>>a>>b;
    zhishu(a,b);
    for(int i=a;i<=b;i++){
        cout<<i<<"=";
        pri(i);
        cout<<endl;
    }
    return 0;
}

相关文章

  • 算法笔记_03:蓝桥杯练习 分解质因数

    这是我第一次自己写的,思考的递归程序,看起来有些繁琐。 1. 问题描述 将一个正整数N(N∈[1,32768])分...

  • 练习-分解质因数

    Question:将一个正整数分解质因数。例如:输入90,打印出90=233*5方法一:分两步执行因为只有合数可以...

  • 蓝桥杯算法题练习

    1.入门训练 Fibonacci数列 最基础的,用java,普通无脑递归必爆。 2.入门训练 圆的面积 注意输出的...

  • 最近一周计划

    1.准备蓝桥杯竞赛,每天至少抽出一个小时练习算法 2.小组MySQL进度放慢,适当分配时间给算法练习 3.养成早睡...

  • 基础练习 分解质因数

    问题描述求出区间[a,b]中所有整数的质因数分解。输入格式输入两个整数a,b。输出格式每行输出一个数的分解,形如k...

  • 分解质因数和应用

    分解质因数是什么分解质因数就是将一个合数分解成多个质数相乘的形式,这就是分解质因数。我举个最简单的例子,比如说4它...

  • 蓝桥杯有感

    寒假线上学习的时候就开始为这次蓝桥杯做准备,刷算法题,看算法书,学习算法知识,这一周终于迎来了期待已久的蓝桥杯。...

  • 算法笔记_02:蓝桥杯练习 最大的算式

    引用 动态规划:最大算式 1 问题描述 问题描述题目很简单,给出N个数字,不改变它们的相对位置,在中间加入K个乘号...

  • 算法笔记_07: 蓝桥杯练习 王、后传说

    引用 算法训练 王、后传说.大神用数组,用的出神入化啊。 8皇后以及N皇后算法探究 1. 问题描述 地球人都知道...

  • 算法笔记_06:蓝桥杯练习 筛选号码

    1. 问题描述 问题描述有n个人围成一圈,顺序排号(编号为1到n)。从第1个人开始报数(从1到3报数),凡报到3的...

网友评论

      本文标题:算法笔记_03:蓝桥杯练习 分解质因数

      本文链接:https://www.haomeiwen.com/subject/rhrvgttx.html