繁体   English   中英

java程序中找到一些主要因素

[英]java program to find prime factors of a number

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;
}

}

我已编写此代码来查找数字的主要因素。 我应用的逻辑对我来说似乎很好,但是输出有问题。

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();

DanGordon说您应该将i而不是factors传递给isPrime()是正确的。 这样可以防止输出复合数字,但是仍然不能解决即使输入的数字是素数也不会显示的问题。 那里的问题在于您的for循环。 i<num告诉程序仅在i小于输入的数字时才迭代for循环,因此,一旦i等于num ,它就会退出循环。 如果将i<num更改为i<=num ,这将确保当i等于输入的数字时循环也将运行,因此如果该数字为质数,则它将显示输入的数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM