如果是素数或复合数,如何识别输入值?

时间:2014-11-29 19:37:19

标签: java numbers primes composite

问题: 接受一个号码并显示消息" 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();
  }
}

}

2 个答案:

答案 0 :(得分:1)

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

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

但是,如果要编写确定性算法,可以通过尝试从2到sqrt(n)的所有可能因子来确定n是否为素数,并查看它们中的任何一个是否精确地划分为n。你的代码直到n,这是低效的。它还将决定所有值都是复合的,因为n总是精确到n。至少,你应该停在n-1。你还需要从2而不是1开始,因为1总是精确地进入n。

答案 1 :(得分:1)

你应该自己做这件事,但是在这里你没有最佳代码:

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");
    }