import java.util.Scanner;
public class JavaApplication1 {
public static void main(String[] args) {
Scanner kboard = new Scanner(System.in);
int n = 0;
int i = 1;
System.out.println("Enter a positive number");
n = kboard.nextInt();
System.out.print("The Prime Factors of " + n + " are : ");
value = 2;
while (n > 1) {
i = 1;
if (n % i != 0){
i = 1;
i=i+1;
if(n % i == 0){
System.out.println(" "+ i);
}
}
else {
System.out.print("1 and " + n);
break;
}
}
}
}
这是我的程序,我在大约一个月前开始编码,但该程序只给出1和数字作为输出而不是主要因素。
答案 0 :(得分:0)
程序总是将1作为输出,因为:
i = 1; if (n % i != 0) { // ... } else { System.out.print("1 and " + n); break; }
由于i = 1
,n % i != 0
为false,因为任何n
模块1都为0。
因此,else
块始终会被执行,并且您会立即跳出while
循环。
即使你解决了这个问题,这个程序还有很多其他问题:
n > 1
是无意义的,因为此n
永远不会在此循环中发生变化,因此条件始终为true
。% 1
毫无意义,因为每个数字除以1.您应该从2开始检查。通过微小的改进,可以改进循环以找到因素:
List<Integer> factors = new ArrayList<>();
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) {
factors.add(i);
}
}
但这还不够好。
这将找到所有因素,而不仅仅是主要因素。
例如,对于数字40,它会找到2, 4, 5, 8, 10
,
其中只有2和5是素数。
一个简单的解决方案是添加另一个名为isPrime
的方法,用于检查数字是否为素数。
答案 1 :(得分:0)
这应该是你的简单伎俩: 只需从用户输入设置num。
C:\Users\aries\Desktop>"Second perl.pl"
syntax error at C:\Users\aries\Desktop\Second perl.pl line 9, near "} else"
Execution of C:\Users\aries\Desktop\Second perl.pl aborted due to compilation errors.
答案 2 :(得分:0)
如果你想获得所有素数除数,你可以尝试:
int i = 2;
while (n > 1) {
if (n % i == 0) {
System.out.print(" " + i);
while ( n % i == 0 ) {
n /= i;
}
}
i++;
}
如果n = 960
打印2 3 5
。
如果n = 11
打印11
。
您如何确定不考虑不是素数的数字?
while
循环尽可能地分割数字。所以,这个数字不会除以4,因为如果可能的话,它已经被2除了两次。如果您还想获得这些素因子的指数,您可以使用0
初始化变量,为每个除法递增它,然后将其打印到标准输出:
int i = 2;
while (n > 1) {
if (n % i == 0) {
System.out.print(" " + i);
int p = 0;
while ( n % i == 0 ) {
n /= i;
p++;
}
System.out.print("^"+p);
}
i++;
}
如果n = 98
打印2^1 7^2
。