这个暑假一直在进行理论学习,很久没更新博客了,都几乎忘了怎么用Markdown
今天学理论烦躁时写了几道java的小题。下面这道题我觉得挺有趣的,放出来大家一起看看:
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
import java.util.*;
public class lianxi04 {
public static void main(String args[]) {
System.out.println("请输入一个正整数:");
Scanner s=new Scanner(System.in);
int n=s.nextInt();
int k=2;
System.out.println(n+"=");
while(k<=n) {
if(n==k) {
System.out.println(k);
break;
}
else if(n%k==0) {
System.out.print(k+"*");
n=n/k;
}
else k++;
}
}
}
这道题乍一看会感觉比较麻烦,因为既要考虑分解,还要是质数(素数)。
我刚拿到手的想法是,这道题肯定得有一个方法用来判断一个数是不是素数,然后将这个方法拿到main方法中去用。这样做是能做出来的,但是未免有些过于麻烦了。
我又想了一种方法,那就是:
直接从2一个一个的判断,假如2不是它的质因数,那么所有能被2整除的数当然也不是它的因数,就不用考虑是不是质数了;接着3,假如3不是它的质因数,那么所有能被3整除的数当然也不是它的因数,就不用考虑是不是质数了……以此类推,后面的都可以这样考虑。下面是这个方法的算法步骤:
- 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可;
- 如果n != k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步;
- 如果n不能被k整除,则用k+1作为k的值,重复执行第一步。