Java显示数字的素数因子分解

时间:2012-09-24 17:41:51

标签: java factorization

因此,对于我的任务,我必须编写一个程序,要求用户输入整数,然后打印出该数字的素数因子分解。 这就是我所拥有的:

import java.util.Scanner;

public class PrimeFactor {
    public static void main(String[] args) {
        System.out.print("Enter a positive number: ");
        Scanner scanner = new Scanner (System.in);
        int number = scanner.nextInt();
        int count;
        for (int i = 2; i<=(number); i++) {
            count = 0;
            while (number % i == 0) {
                number /= i;
                count++;
                if (count == 0) {
                    continue;
                }
            }
            System.out.println(i+ "**" + count);
        }
    }
}

我现在遇到的问题是每当我使用数字15453运行它时,我会得到一个从1到100的每个因子的列表及其指数,当我只想要素数因子时,我和#39;我坚持如何继续。

7 个答案:

答案 0 :(得分:4)

你快到了!将if-continue块移到for循环之外。否则,它会“继续”最内层的循环,而不是你想要的循环。

while (number % i == 0) {
    number /= i;
    count++;
}
if (count == 0) {
    continue;
}
System.out.println(i+ "**" + count);

或者,您可以在System.out.println中附上if (count != 0)来电,因为它是continue之后的唯一声明:

while (number % i == 0) {
    number /= i;
    count++;
}
if (count != 0) {
    System.out.println(i+ "**" + count);
}

您在ideone上的节目:link

答案 1 :(得分:1)

public class _03_LargestPrimeFactor {

public static void main(String[] args) {

    long a = 600851475143L;

    for(int i=2; i<(a/i); i++){                         // no factors would exist beyond a/i for a particular i

        while( a%i == 0){                               // if i is a factor 
            a = a/i;                                    // divide a by i else we wont get a prime number
            System.out.print(a + " x " + i + "\n");
        }
    }

    if(a > 1)
    System.out.println("largest prime factor: " + a);
}

}

控制台:

8462696833 x 71

10086647 x 839

6857 x 1471

最大素因子:6857

答案 2 :(得分:0)

你很亲密:

  1. System.out.println语句必须位于for循环中,且仅显示count>0
  2. 删除if(count == 0) { continue; },因为你只是增加了count
  3. ,它就没用了

答案 3 :(得分:0)

从while循环中删除if(count == 0){continue;}语句,并将其放在for循环中。 :)

for (int i = 2; i<=(number); i++) {
        count = 0;
        while (number % i == 0) {
            number /= i;
            count++;
        }
        if(count==0) continue;
        System.out.println(i+ "**" + count);
    }

答案 4 :(得分:0)

不确定为什么要打印乘法两次!这是清理过的代码:

public static void printPrimeNumbers(int prime) {

    int n;

    for (int i = 2; i <= prime; i++) {
        n = 0;
        while (prime % i == 0) {
            prime /= i;
            n++;

        }

        if (n != 0) {
            for (int j = n; j > 0; j--) {
                System.out.print(i);

                if (prime != 1) {
                    System.out.print("*");
                }
            }
        }
    }
}

答案 5 :(得分:0)

您也可以从以下功能获得一些帮助。

public int getPrimeNumber(double number) {
    int j = 0;
    while (number % 2 == 0) {
        number = number / 2;
        j = 2;
    }

    for (int i = 3; i <= number; i = i + 2) {
        while (number % i == 0) {
            number = number / i;
            j = i;
        }
    }

    return j == 0 ? 1 : j;
}

此函数将返回给定数字的最大素数因子。

答案 6 :(得分:0)

首先,你的<uses-permission-group>在while循环中,在那里它没有任何效果。最小的修复是

continue

但是你还有其他一些问题:

  • 你的代码没有被正确地“分解”(具有讽刺意味的是,在这种情况下,“因素”意味着没有被分解为函数
  • 变量名称选择不当
  • public class PrimeFactor { public static void main(String[] args) { System.out.print("Enter a positive number: "); Scanner scanner = new Scanner (System.in); int number = scanner.nextInt(); int count; for (int i = 2; i<=(number); i++) { count = 0; while (number % i == 0) { number /= i; count++; } if (count == 0) { continue; } System.out.println(i+ "**" + count); } } } 足够时,您可以使用goto(在这种情况下为continue

更好的代码将是

if