蓝桥杯 分解质因数 Java解法(递归、非递归)
来源:互联网 发布:淘宝运动鞋正品店 编辑:程序博客网 时间:2024/06/05 18:46
问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000
根据以往的经验,一般循环的问题,都可以转换为递归的问题,而形成递归的思路也是起源于循环,而想使用递归代替循环,是为了简化美化代
下面提供非递归、递归的两种Java解法
(1)非递归
①为了助于理解,先提供一个有点小瑕疵的代码,即格式上未解决=*
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int begin = in.nextInt(); int end = in.nextInt(); for (int k = begin; k <= end; k++) { System.out.println(fun(k)); } } public static String fun(int n) { String s = "" + n + "="; for (int i = 2; i < n; i++) {// 每次对会把最小因数查出来 if (n % i == 0) { //把符合要求的加近字符串,还要注意格式 s += "*"; s += i; n /= i; i = 1; // 重新循环从小到大查因数,切不能令i=2,因为循环结束了会i++ } } // 注意别忘了加上最后一个质因数 return s + "*" + n; }}
console 输出
②下面解决这个问题,即使用 flag 标记来区分=号后面是否已经有数字了,
有则在新加质因数时,先加*再加数字
没有则在新加质因数时,直接加数字
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int begin = in.nextInt(); int end = in.nextInt(); for (int k = begin; k <= end; k++) { System.out.println(fun(k)); } } public static String fun(int n) { boolean flag = false; //因=号后面先加数字再加*的,这里作下区分 String s = "" + n + "="; for (int i = 2; i < n; i++) {//每次对会把最小因数查出来 if (n % i == 0) { //把符合要求的加近字符串,还要注意格式 if (flag == false) { s += i; flag = true; } else { s += "*"; s += i; } n = n / i; i = 1; //重新循环从小到大查因数,切不能令i=2,因为循环结束了会i++ } } //注意别忘了加上最后一个质因数 if (flag == false) { return s + n; } return s + "*" + n; }}
(2)下面附上的递归解法
import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner reader = new Scanner(System.in); int start=reader.nextInt(); int end=reader.nextInt(); for(int i=start;i<=end;i++){ System.out.println(i+"="+fun(i).substring(1)); } } static String fun(int n){ String str=""; for(int i=2;i<n;i++){ if(n%i==0){ return "*"+str+i+fun(n/i); } } return "*"+n; }}
阅读全文
1 0
- 蓝桥杯 分解质因数 Java解法(递归、非递归)
- 分解质因数(递归)
- 递归分解质因数
- java通过递归实现质因数分解
- 背包非递归解法
- Fibonacci非递归解法
- Java青蛙跳台阶的递归和非递归解法
- 汉若塔游戏非递归解法(c#)
- 背包问题(非递归解法)
- 使用递归求一个数分解质因数
- 【(伪)递归】HDU1997 - 汉诺塔VII(非递归解法)
- 全排列(含递归和非递归的解法)
- 全排列(含递归和非递归的解法)
- 全排列(含递归和非递归的解法)
- 全排列(含递归和非递归的解法)
- 全排列(含递归和非递归的解法)
- 全排列(含递归和非递归的解法)
- 二叉树之遍历(递归和非递归解法)
- secureCrt开启oracle
- ONVIF协议网络摄像机(IPC)客户端程序开发(9):鉴权(认证)
- pyhdf安装并读取hdf4文件
- Easyui实例--tree组件的使用1
- mui 支付微信、支付宝
- 蓝桥杯 分解质因数 Java解法(递归、非递归)
- 如何调试接口
- 直播 | 2017阿里双11在线技术峰会
- Perf
- 送你一份最全年度计算机视觉技术报告 !(附学习资料)
- Mysql中的触发器
- 报名 | 大数据下的自杀风险感知与疏导讲座
- Java 可用小代码之 字母数组
- java切割合并文件