java程序查找数字的素数因子

时间:2015-10-28 15:26:56

标签: java

public class PrimeFactor {

public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    System.out.println("Enter the number:");
    int num=input.nextInt();
    int factors;
    for(int i=1;i<num;i++)
    {
        factors=num%i;
        if(factors==0 && isPrime(factors))
        System.out.println(i+"");
    }
    input.close();
}
public static boolean isPrime(int n)
{
    boolean prime=true;
    for(int i=2;i<n;i++)
    {
        if(n%i==0)
        {
            prime=false;
            break;
        }

    }
    return prime;
}

}

我已编写此代码以查找数字的素数因子。我应用的逻辑似乎很好,但输出出错了。

2 个答案:

答案 0 :(得分:2)

for(int i=1;i<num;i++)
    {
        factors=num%i;
        if(factors==0 && isPrime(factors))
        System.out.println(i+"");
    }
    input.close();

factorsnum / i的剩余部分。因此,如果factors返回0,那么您将0传递给方法isPrime(),这没有任何意义。我想您可能希望将i传递给isPrime,而不是factors

所以你的循环应该是相同的,但是传递给isPrime()函数的参数不同。

for(int i=1;i<num;i++)
    {
        factors=num%i;
        if(factors==0 && isPrime(i))
        System.out.println(i+"");
    }
    input.close();

答案 1 :(得分:0)

DanGordon说你应该将i代替factors传递给isPrime(),这是正确的。这可以防止输出复合数字,但仍然没有解决输入数字即使是素数也不会显示的问题。您的for循环存在问题。只要i<num小于输入的数字,for就会告诉程序迭代i循环,因此,i等于num它突破了循环。如果您将i<num更改为i<=num,则会确保当i等于输入的数字时循环运行,因此如果该数字为素数,则应显示输入的数字。