饭后一道题,天天好心情~~
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
表示我擅长把简单的事情复杂化,虽然做出结果了,但是算法实在是太坑爹了,我这里不好意思先贴自己的坑爹算法,目测学妹看到了会鄙视我的。。
先看标准答案~简洁无比~
- package day4;
- import java.util.Scanner;
- public class Test2 {
- public static void main(String[] args) {
- // 解决要分解的数字
- System.out.println("请输入要分解的数字(一定要是整数):");
- Scanner in = new Scanner(System.in);
- int i = in.nextInt();
- // 分解方法
- int k = 2;
- System.out.print(i + "=");
- while (i > k) {
- if (i % k == 0) {
- System.out.print(k + "*");
- i = i / k;
- } else {
- k++;
- }
- }
- System.out.print(i + ";");
- }
- }
复制代码 咳咳,我这里要展示我的坑爹算法了~
看看有没有和我一样这样做的,受上次那道求素数的题的影响,这次我的思路是
(1)算出所有小于 90 的素数
(2)遍历这些素数,然后看看有没有能被90整除的,有的话,把这个整数加入 List
(3)然后用相除的结果递归调用 (1)(2)- package day4;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- /**
- * 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
- *
- * @author yellowbaby
- *
- */
- public class Test {
- private static List<Integer> integers = new ArrayList<Integer>();
- public static void main(String[] args) {
- decompose(90);
-
- System.out.println(integers);
- }
- /**
- * 利用递归分解整数 i
- */
- private static void decompose(int i) {
- List<Integer> primes = getPrime(i);
- for (Iterator<Integer> it = primes.iterator(); it.hasNext();) {
- int current = it.next();
- if (i % current == 0) {
- integers.add(current);
- decompose(i / current);
- break;
- }
- }
- }
- /**
- * 得到小于 i 的所有素数
- */
- private static List<Integer> getPrime(int i) {
- List<Integer> retVal = new ArrayList<Integer>();// 存放所有的素数
- for (int num = 2; num <= i; num++) {
- if (isPrime(num)) {
- retVal.add(num);
- }
- }
- return retVal;
- }
- /**
- *
- * 判断是否是素数,素数的概念:指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数
- */
- private static boolean isPrime(int num) {
- for (int i = 2; i*i < num; i++) {
- if (num % i == 0) {
- return false;
- }
- }
- return true;
- }
- }
复制代码 |