- import java.io.*;
- public class Text4 {
- public static void main(String[] args) throws IOException
- {
- //定义一个int型变量,用来存放得到的键盘的值。
- int shu=0;
- //定义输入流,接收从键盘得到的数据。
- //System.in是标准输入流,对应键盘输入。
- //BufferedReader是字符缓冲输入流,用它的原因是因为它有readLine方法。
- BufferedReader stdin=new BufferedReader(new InputStreamReader(System.in));
- //提示用户输入正整数。
- System.out.print("请输入正整数:");
- //用Integer的构造方法,把得到的字符串转换为int型数据。
- shu=(new Integer(stdin.readLine()));
- //调用chuli方法。
- chuLi(shu);
- }
-
- /* 递归实现正整数分解质因数
- 明确质数概念,只能被1或它本身整除。
- 基本思路:
- 1.从2开始,以后递加,判断n能否被其整除,结束条件是其已经等于n.
- 2.如果能被整除,得到该数,而n值就变为整除得到的商;
- 3.然后判断这个n有没有质因数,方法就是上面讲的,再得到商,再判断。。。
- 4.结束条件:得到的商n,是质因数。
- */
- public static void chuLi(int n)
- {
- //for循环从2开始,因为n肯定能被1整除,而且被1整除也不算判定条件
- for(int i=2;i<=n;i++)
- {
- //如果i的值还小于n,且能够整除,得到i值。
- if(n>i&&(n%i==0))
- {
- //此时n变为他们整除的商。
- n=n/i;
- //得到i,这里的处理是打印。
- System.out.print(i+"*");
- //将得到的新的n,再次判断是否有质因数。
- chuLi(n);
- //这句是最后n为质数了,chuli方法返回后,会继续向下执行,
- //执行break,跳出循环,递归方法结束,否则,会继续执行if(n == i)
- //而此时i很可能不等于n,那么for循环还要继续执行
- //继续执行的后果,见图分析。
- break;//这句很重要
- }
-
- //直到n==i,递归结束。
- if(n==i)
- { //把最后一个质数打印出。
- System.out.print(i);
- //返回
- return;
- }
- }
- }
- }
复制代码 |