【问题标题】:How to identify the input value if it is a prime or a composite number?如果输入值是素数还是合数,如何识别?
【发布时间】:2014-11-29 19:37:18
【问题描述】:

问题: 接受一个数字,如果数字是素数则显示消息“PRIME”,否则显示消息“COMPOSITE”。

我睡不着想如何为此编写代码。我在想,如果我在这里得到逻辑,那可能会很容易。对不起大家,我只是一个初学者

那么你能帮我解决这个问题吗?

我的教授告诉我,我可以得到这些代码中的逻辑,但我还是很困惑 :D

这是我的最后一个代码,用于获取我的教授告诉我的因素,我可以在这里得到逻辑。 (我不知道怎么做:D)

import java.util.Scanner;
public class Factors {
  public static void main(String[] args) {  
    Scanner n = new Scanner(System.in);
    int num;
    int ctr = 1;
    System.out.print("Enter a number : ");
    num = n.nextInt();
    while(ctr <= num) {
      if(num % ctr == 0) {
        System.out.print(ctr + "\t");
      }
      ctr++;
    }
    System.out.println();
  }
}

}

【问题讨论】:

    标签: java numbers primes composite


    【解决方案1】:

    嗯,这对于你应该做什么有点模糊。

    在实践中这样做的方法是使用像 Rabin-Miller 这样的概率算法,可以将其设置为以任何您喜欢的准确度给出正确答案,并且比确定性算法更有效,可以保证给出正确的答案。

    但是,如果您想编写确定性算法,您可以通过尝试从 2 到 sqrt(n) 的所有可能因数来确定 n 是否为素数,并查看其中是否有任何一个恰好可以整除 n。您的代码直接上升到 n,这是低效的。它还将决定所有值都是复合的,因为 n 总是恰好进入 n。至少,您应该停在 n-1 处。您还需要从 2 而不是 1 开始,因为 1 总是正好进入 n。

    【讨论】:

    • 多么棒的小贴士.. 我会把它钉住
    【解决方案2】:

    你应该自己做这个,但无论如何你没有最佳的代码:

    Scanner n = new Scanner(System.in);
    
        int num;
        int ctr=2;
        boolean prime = true;
    
        System.out.print("Enter a number : ");
        num = n.nextInt();
    
        while(ctr<num){
    
            if(num%ctr==0){
    
                prime = false
    
    
        break;
    }
            ctr++;
        }
    
        if (prime) {
            System.out.println("PRIME");
        } else {
            System.out.println("COMPOSITE");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 2014-05-15
      • 2020-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多