正质因数分解
題目:將一個正質因數分解。例如:90=2*3*3*5.
* 程序分析:對n進行質因數分解,應先找到一個最小的質數k,然后按下述步驟:
1.如果這個質數恰等于n,則說明分解質因數已經結束,打印出即可
2.如果n<>k,但n能被k整除,則打印出k的值,并利用n除以k的商,作為新的正整數,重復執行第一步
3.如果n不能被k整除,則用k+1作為k的值,重復執行第一步
按照上面程序分析思想實現
package com.math.forth;import java.util.Scanner;/*** 將一個正質因數分解。例如:90=2*3*3*5.* 程序分析:對n進行質因數分解,應先找到一個最小的質數k,然后按下述步驟:* 1.如果這個質數恰等于n,則說明分解質因數已經結束,打印出即可* 2.如果n<>k,但n能被k整除,則打印出k的值,并利用n除以k的商,作為新的正整數,重復執行第一步* 3.如果n不能被k整除,則用k+1作為k的值,重復執行第一步* @author wql**/ public class Method04 {public static void main(String[] args) {System.out.print("請輸入一個質數:");Scanner sc=new Scanner(System.in);int n=sc.nextInt();System.out.print(n+"=");method(n);}public static void method(int n){boolean flag=false; //判斷該數有沒有質因數標志for(int k=2;k<n;k++) {//找出質數最小的質因數kwhile(k!=n) {if(n%k==0) {//如果n<>k,但n能被k整除,則打印出k的值System.out.print(k+"*");flag=true;n=n/k;}else {break;}}}//如果n不能被k整除,則打印出n的值if(flag){System.out.println(n);}else{System.out.println("1*"+n);}} }看到這個題目,我的想法是遞歸調用,實現如下
package com.math.forth;import java.util.Scanner;/*** @author wql**/ public class Method04 {public static void main(String[] args) {System.out.print("請輸入一個質數:");Scanner sc=new Scanner(System.in);int n=sc.nextInt();System.out.print(n+"=");method(n);}public static void method(int num){boolean flag=false;for(int i=2;i<=num/2;i++){if(num%i==0) {System.out.print(i+"*");int x=num/i;method(x);//去遞歸調用,但遞歸調用結束,for循環給終止flag=true;break;}}if(!flag){System.out.print("1*"+num);}} }下面相對繁瑣的方法,可能比較好理解
package com.math.forth;import java.util.Scanner;/*** @author wql**/ public class Method04 {public static void main(String[] args) {System.out.print("請輸入一個質數:");Scanner sc=new Scanner(System.in);int n=sc.nextInt();System.out.print(n+"=");method2(n);}public static void method(int num){int x=0;for(int i=2;i<=num/2;i++){if(num%i==0) {System.out.print(i+"*");x=num/i;break;}}if(x==0){//如果此數是個素數,只能被1和其自身整除System.out.print("1*"+num);}else{isNum(x);}} /*** 判斷是不是質數* @param x*/public static void isNum(int x) {boolean flag=false;for(int i=2;i<x;i++){if(x%i==0){flag=true;break;}}if(flag){method(x);//如果是質數,繼續分解}else {System.out.println(x);}} }轉載于:https://www.cnblogs.com/wangqilong/p/8279776.html
總結
- 上一篇: pthread_cleanup_push
- 下一篇: TCP/IP模型如何分层?路由器、网卡分