5
回答
输出一个数的质因数,java新手虚心求教
开发十年,就只剩下这套Java开发体系了   

正在学习java,有一道题目是读取一个数,输出他的质因数,中间以x链接,下面是我的代码,我想测试下写的是否正确,但是点了debug之后怎么就没反应了,试了半天也不行,求大神指点,非常感谢。

我的大概思路是把判断是否为质数定义为一个函数,然后判断从2到输入的这个数之间的质数,然后用这个数去除质数做循环。感觉思路是对的,但是代码写的有点晕。

import java.util.Scanner;

public class Lei {
	public static boolean zhishu(int a)
	{
		boolean zhishu = true;
		for(int i=2;i<a;i++)
		{
			if(a%i==0)
			{
				zhishu=false;
				break;
			}
		}
		return zhishu;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int n=in.nextInt();
		if(zhishu(n))
		{
		System.out.println("n="+n);	
		}
		else
		{
			for(int i=2;i<n;i++)
			{
				if(zhishu(n))
				{
					while(n%i==0)
					{
						System.out.print(i+"x");
						n=n/i;
					}
				}
			}
		}
	}

}

举报
Titanicccc
发帖于2年前 5回/463阅
共有5个答案 最后回答: 2年前
代码逻辑很有问题,if(zhishu(n))是为ture的时候才往下执行。。else后面的代码完全没有起到作用
--- 共有 3 条评论 ---
Titanicccc@NullPointerEx 回复@NullPointerEx : 奥,明白了,我应该把这个if里面的n改成i就行了,非常感谢大神指点 2年前 回复
NullPointerEx回复 @Titanicccc : 对啊。。但是你else里面有个if是为真才执行 2年前 回复
Titanicccc当false的时候不就是执行else了么 2年前 回复
public class PrimeClient { public static void main(String[] args) {


        List<Integer> factorList = allPrimeFactor(1025);   for(int n:factorList){
            System.out.println(n);  }

    } /**  * 获取所有的素数因子  * @param n  * @return  */  public static List<Integer> allPrimeFactor(int n){ return IntStream.rangeClosed(2, n).filter(dat->n%dat==0).filter(dat ->isPrime(dat)).boxed().collect(Collectors.toList());   } /**  * 判断一个整数,是否是 素数  * @param n  * @return  */  public  static boolean isPrime(int n) { return IntStream.range(2,n).allMatch(num->n%num!=0);  }


}
public class PrimeClient {


    public static void main(String[] args) {




        List<Integer> factorList = allPrimeFactor(1025);
        
        for(int n:factorList){
            System.out.println(n);
        }


    }


    /**
     * 获取所有的素数因子
     * @param n
     * @return
     */
    public static List<Integer> allPrimeFactor(int n){
    
       return IntStream.rangeClosed(2, n).filter(dat->n%dat==0).filter(dat ->isPrime(dat)).boxed().collect(Collectors.toList());
       
    }




    /**
     * 判断一个整数,是否是 素数
     * @param n
     * @return
     */
    public  static boolean isPrime(int n) {


        return IntStream.range(2,n).allMatch(num->n%num!=0);
    }




}
--- 共有 2 条评论 ---
❤熊就该有个熊样❤我真心觉得你并不能看懂他的 2年前 回复
Titanicccc额…手机上看好乱…回去去电脑里看看…多谢 2年前 回复
package text;


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class zhishu {




public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner word = new Scanner(System.in);
List list = new ArrayList();
int wordG = word.nextInt();
if(wordG==0||wordG==1){
System.out.println("请输入一个除了0和1一位的数字");
}else{
if(wordG==2||wordG==3||wordG==5||wordG==7){
System.out.println(wordG+"是一个素数,质因数为:1和"+wordG);
}
else{
System.out.println(wordG+"是一个合数");
for(int i=1;i<=wordG;i++){
if(wordG%i==0){
list.add(i);
}
}
System.out.println("质因数分别为:"+list);
}
}


}


}

--- 共有 2 条评论 ---
Titanicccc回复 @❤熊就该有个熊样❤ : 上一个确实没看太懂。。。不过有人帮我发现了代码中的错误。。。我已经改好了,谢谢啦。。定义类我也刚开始学,还在联系中 2年前 回复
❤熊就该有个熊样❤按照你的扒的 我写在一个类里呢 2年前 回复
顶部