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;
}
}
我已编写此代码以查找数字的素数因子。我应用的逻辑似乎很好,但输出出错了。
答案 0 :(得分:2)
for(int i=1;i<num;i++)
{
factors=num%i;
if(factors==0 && isPrime(factors))
System.out.println(i+"");
}
input.close();
factors
是num / 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
等于输入的数字时循环运行,因此如果该数字为素数,则应显示输入的数字。