【问题标题】:What is the error in my Largest Prime Number program?我的最大质数程序中的错误是什么?
【发布时间】:2016-10-01 13:29:49
【问题描述】:
public class LargestPrimeFactor {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int cases = scan.nextInt();
    int num = 0, temp = 0;
        while(cases!=0) {
        num = scan.nextInt();
        for(int i=2; i<=num; i++)
            if(num%i==0) {
                if(isPrime(i)) {
                    if(temp<i)
                        temp = i; //to always have the largest factor
                }
                num/=i; // to reduce the iterations for a large number.
            }
        System.out.println(temp);
        cases--;
    }
}

public static boolean isPrime(int num) {
    if ( num > 2 && num%2 == 0 )
        return false;
    int top = (int)Math.sqrt(num) + 1;
    for(int i = 3; i < top; i+=2)
        if(num % i == 0)
            return false;
    return true; 
}
}

此代码计算一个数的最大素因子。 这给出了在线法官 5/6 次的错误。我无法弄清楚异常或错误。 请帮忙...

【问题讨论】:

  • 你看过它给出的输出了吗?
  • 你看过输入吗?
  • @Carcigenicate 它不显示输入和输出。只是时间
  • @PeterLawrey 它不显示输入和输出。只是时间
  • @Shadow_Sphynx 这就是插入打印语句或使用调试器的原因。您需要通过查看程序运行的情况来学习诊断程序。

标签: java primes


【解决方案1】:

您应该为每种情况将 temp 重置为 0。 示例输入:

2 7 4

预期输出:

7
2

实际输出

7
7

希望对你有帮助。

如果您在需要之前声明变量,则更容易出现此类错误。而不是

int num = 0, temp = 0;
    while(cases!=0) {
    num = scan.nextInt();

试试

while (cases != 0) {
    int num = scan.nextInt();
    int temp = 0;

【讨论】:

  • 我认为这就是问题所在。谢谢...但是我想问两件事:1.) 在最后一种情况下,我仍然收到 运行时错误。任何想法为什么? 2.) 如果我在循环中声明一个变量,我的程序不会占用更多空间吗?
  • 1) 不,不是,抱歉。你是说在线法官审理的最后一个案件? 2) 绝对不是。编译器足够聪明,可以在两种情况下以相同的方式使用空间,即使不是,它仍然不会占用 more。如果确实如此,您不必担心;空间是如此便宜。
  • 对你的程序在非法输入的情况下应该做什么有什么要求吗?如果是这样,如果我正在写在线评委,我肯定会尝试一些。这可能是运行时错误的解释吗? (刚试了-1例,你的程序无限循环运行。)
  • 是的,在线法官运行的案例。如果法官给出的值很大,我尝试将数据类型从 int 更改为 long,但随后我得到 因超时而终止。它仍然不被接受。
  • 听起来你走在正确的轨道上。不过,我还没弄清楚发生了什么。
猜你喜欢
  • 1970-01-01
  • 2022-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2012-02-06
相关资源
最近更新 更多