A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。

//最好用简单易懂的方式解答

8 个回复

倒序浏览
[Java] 纯文本查看 复制代码
/*
	题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
*/
import java.util.Scanner;

//分解因数测试
class Demo_ResolveFactor{
	public static void main(String[] args){
		System.out.println("请输入一个正整数");
		Scanner sc = new Scanner(System.in);
		//获取正整数 n
		int n = sc.nextInt();
		//调用分解因数方法
		ResolveFactor(n);
	}	
	
	//质因数分解方法
	private static void ResolveFactor(int n){
		//定义一个字符串,初始化为 n= 用于拼接
		String s = n+"=";
		//定义第一个质因数
		int k = 2;
		//分解质因数
		
		
		if(n < 0){
			System.out.println("您输入的数据有误");
		}else if( n == k || judge(n)){	//调用判断是否为质数的方法
			//正整数本身是一个质数,就直接输出
			System.out.print(s+n);
		}else{
			//循环遍历它的因子
			while(k < n){
				if(n % k == 0){
					s += k+"*";
					n /=k;
				}else{
					k++;
				}
			}
			//输出所有分解的质因数
			System.out.println("分解质因数如下:");
			System.out.print(s+n);
		}
	}

	//判断是否为质数的方法
	private static boolean judge(int k){
		boolean flag = false;
		if(k == 0 || k == 1){
			flag = false;
		}else{
			//如果k不是1,就从2开始到其平方根依次判断
			for(int i = 2; i <= Math.sqrt(k);i++){
				if(k % i == 0){
					flag = false;
					break;
				}else{
					flag = true;
				}
				
			}
		}
		
		return flag;
	}

}

回复 使用道具 举报 1 0
谢了~~虽然还不怎么懂
回复 使用道具 举报
其实不需要判断质数,回想一下你小学是如何把90分解成质因数的乘积的。直接用2、3、5作为除数就可以了。如果使用程序的话,主要思想就是,从2开始,如果可以被整除,就进行整除并打印出来,否则就把除数加1。(实际上除数根本不可能为4等非质数,因为4=2*2,早就在除数等于2的时候被分解成2*2,就是说4等非质数也被KO成质数了)。代码如下,供参考。
import java.util.Scanner;

public class ITTest56 {

        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入整数,若希望结束输入,请输入0");
                while(sc.hasNext()){
                        int s = sc.nextInt();
                        if(s==0){
                                break;
                        }
                        fenjie(s);
                }
                sc.close();
               
        }

        private static void fenjie(int s) {
                System.out.print(s+"=");
                int k = 2;
                //分解到最后一步之前,s均大于k。分解到最后,s=k。因此采用s>k作为循环条件。
                while(s>k){
                        if(s%k==0){
                                s = s/k;
                                System.out.print(k+"*");
                        }else{
                                k++;
                                continue;
                        }
                }
                //分解到最后一步时,不需要增加*号,直接打印出数字即可。
                System.out.print(k);
        }
}
回复 使用道具 举报 1 0
public class Demo04 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("Please input the number:");
                int n = sc.nextInt();
                System.out.print(n+"=");
                for (int i = 2; i <= n ; i++) {
                        while(i<n) {
                                if(n%i==0) {
                                        n=n/i;
                                        System.out.print(i);
                                        System.out.print("*");
                                       
                                }
                                else break;
                               
                        }
                        while(i==n){
                                System.out.print(i);
                                break;
                        }
                }
        }
}
回复 使用道具 举报
public class Demo04 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("Please input the number:");
                int n = sc.nextInt();
                System.out.print(n+"=");
                for (int i = 2; i <= n ; i++) {
                        while(i<n) {
                                if(n%i==0) {
                                        n=n/i;
                                        System.out.print(i);
                                        System.out.print("*");
                                       
                                }
                                else break;
                                
                        }
                        while(i==n){
                                System.out.print(i);
                                break;
                        }
                }
        }
}
回复 使用道具 举报
大天 发表于 2016-8-7 20:41
public class Demo04 {
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in ...

简洁,喜欢
回复 使用道具 举报
不会做,学习2楼的方法中!
回复 使用道具 举报
回复中有一个代码好简洁啊,有点搞过ACM的味道
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马