浏览 2175 次
锁定老帖子 主题:【java练习题4】--分解质因数
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-02
【程序4】 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
public static void fenjie(int n){ System.out.print(n+"=1"); int k=2; if(n==2){ System.out.print("*2"); }else{ while(n>=k){ if(n%k==0){ System.out.print("*"+k); n=n/k; }else{ k++; } } } }
public static void main(String[] args) { // TODO Auto-generated method stub Scanner input=new Scanner(System.in); System.out.print("请输入一个正整数:"); int num=input.nextInt(); if(num<=1) { System.out.println("无效的被分解数!!"); }else{ fenjie(num); }
} 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-04-24
最后修改:2012-04-24
还可以改进。不需要把k从2一起循环到n。
只需要到平方根那里就行了。 比如 13分解,因为13平方根是3.60555。不大于3.60555的最大整数是3。 所以 不需要for(int k=2;k<=13;k++) 只需要for(int k=2;k<=3;k++)就可以了。如果一个也没找到,则n一定是质数,直接输出n就行了(即13=13) 所以应该是这样 int pingFangGen=...; //不大于"n的平方根"的最大整数 boolean zhiShu=true; //是否是质数 for(int k=2;k<=pingFangGen;){ if(n%k==0){ System.out.print("*"+k); zhiShu=false; n=n/k; }else{ k++; } } if(zhiShu){ System.out.print(n); } |
|
返回顶楼 | |