课程中的主要因素分类

时间:2016-11-05 22:37:01

标签: java primes

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和数字作为输出而不是主要因素。

3 个答案:

答案 0 :(得分:0)

程序总是将1作为输出,因为:

i = 1;
if (n % i != 0) {
    // ...
} else {
    System.out.print("1 and " + n);
    break;
}

由于i = 1n % 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