检查给定的数字是否为素数?

huangapple go评论110阅读模式
英文:

Check whether the given number is prime or not?

问题

这是我的代码。

  1. Scanner scan = new Scanner(System.in);
  2. int number = scan.nextInt();
  3. int[] arr = new int[number];
  4. for (int i = 0; i < number; i++) {
  5. arr[i] = scan.nextInt();
  6. }
  7. for (int i = 0; i < number; i++) {
  8. int num = arr[i];
  9. for (int j = 2; j <= Math.sqrt(num); j++) {
  10. if (num % j == 0 && num != 2) {
  11. System.out.println(num + "不是质数");
  12. break;
  13. }
  14. }
  15. System.out.println(num + "是质数");
  16. }
英文:

I am trying to implement a code to check whether a given array of numbers is prime or not,

but when the number is not a prime number, the output displays "Prime" and "Not Prime" both answers. What is the mistake I did here and it is a pleasure to have an answer from you? Thank you in advance!

Here is my code.

  1. Scanner scan = new Scanner(System.in);
  2. int number = scan.nextInt();
  3. int[] arr = new int[number];
  4. for (int i = 0; i &lt; number; i++) {
  5. arr[i] = scan.nextInt();
  6. }
  7. for (int i = 0; i &lt; number; i++) {
  8. int num = arr[i];
  9. for (int j = 2; j &lt;= Math.sqrt(num); j++) {
  10. if (num % j == 0 &amp;&amp; num !=2) {
  11. System.out.println(num + &quot;Not prime&quot;);
  12. break;
  13. }
  14. }
  15. System.out.println(num +&quot;Prime&quot;);
  16. }

答案1

得分: 2

如果你对使你的代码更高效感兴趣,可以采用以下方法。

  1. int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
  2. 15, 16, 17, 18, 19, 20 };
  3. for (int num : numbers) {
  4. System.out.println(num + ((isPrime(num) ? " 是" : " 不是") + " 质数"));
  5. }
  6. private static boolean isPrime(int num) {
  7. // 两是质数
  8. if (num == 2) {
  9. return true;
  10. }
  11. // 数字小于等于1或任何偶数
  12. // 数字(除2外)都不是质数
  13. if (num <= 1 || num % 2 == 0) {
  14. return false;
  15. }
  16. // 现在你可以检查奇数除数。
  17. // 并从3开始每次增加2。
  18. for (int i = 3; i <= Math.sqrt(num); i+=2) {
  19. if (num % i == 0) {
  20. return false;
  21. }
  22. }
  23. return true;
  24. }
英文:

If you're interested in making your code a little more efficient you can go this route.

  1. int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
  2. 15, 16, 17, 18, 19, 20 };
  3. for (int num : numbers) {
  4. System.out.println(num + ((isPrime(num) ? &quot; is&quot; : &quot; is not&quot;) + &quot; a prime&quot;));
  5. }
  6. private static boolean isPrime(int num) {
  7. // two is a prime
  8. if (num == 2) {
  9. return true;
  10. }
  11. // numbers 1 or less or any even
  12. // number (sans 2) are not primes
  13. if (num &lt;= 1 || num % 2 == 0) {
  14. return false;
  15. }
  16. // Now you can check for odd divisors.
  17. // and increment by 2 starting with 3.
  18. for (int i = 3; i &lt;= Math.sqrt(num); i+=2) {
  19. if (num % i == 0) {
  20. return false;
  21. }
  22. }
  23. return true;
  24. }

答案2

得分: 1

你应该记住这个数字是不是素数。你的代码没有这样做,因此两个打印语句都会被执行。

  1. Scanner scan = new Scanner(System.in);
  2. int number = scan.nextInt();
  3. int[] arr = new int[number];
  4. for (int i = 0; i < number; i++) {
  5. arr[i] = scan.nextInt();
  6. }
  7. for (int i = 0; i < number; i++) {
  8. int num = arr[i];
  9. boolean isPrime = true;
  10. for (int j = 2; j <= Math.sqrt(num); j++) {
  11. if (num % j == 0 && num != 2) {
  12. isPrime = false;
  13. break;
  14. }
  15. }
  16. if (isPrime) {
  17. System.out.println(num + "是素数");
  18. } else {
  19. System.out.println(num + "不是素数");
  20. }
  21. }
英文:

You should remember whether the number was prime or not. Your code doesn't do that so both prints are reached.

  1. Scanner scan = new Scanner(System.in);
  2. int number = scan.nextInt();
  3. int[] arr = new int[number];
  4. for (int i = 0; i &lt; number; i++) {
  5. arr[i] = scan.nextInt();
  6. }
  7. for (int i = 0; i &lt; number; i++) {
  8. int num = arr[i];
  9. boolean isPrime = true;
  10. for (int j = 2; j &lt;= Math.sqrt(num); j++) {
  11. if (num % j == 0 &amp;&amp; num !=2) {
  12. isPrime = false;
  13. break;
  14. }
  15. }
  16. if (isPrime) {
  17. System.out.println(num +&quot;Prime&quot;);
  18. } else {
  19. System.out.println(num + &quot;Not prime&quot;);
  20. }
  21. }

答案3

得分: 1

使用布尔值来跟踪数字是否为素数。开始时假设它为true(素数),如果发现不是素数,则将其设置为false。

  1. boolean isPrime = true;

然后,根据该布尔值确定消息。

  1. String message = isPrime ? "素数" : "非素数";
英文:

Use a boolean to track whether the number is prime. Assume it's true (prime) to begin with and set it false if it is discovered not to be prime.

  1. boolean isPrime = true;

Afterwards, determine the message based on that boolean.

  1. String message = isPrime ? &quot;Prime&quot; : &quot;Not prime&quot;;

答案4

得分: 0

你可以通过引入一个布尔变量来修复它,例如:

  1. for (int i = 0; i < number; i++) {
  2. int num = arr[i];
  3. boolean isPrime = true;
  4. for (int j = 2; j <= Math.sqrt(num); j++) {
  5. if (num % j == 0 && num != 2) {
  6. isPrime = false;
  7. break;
  8. }
  9. }
  10. if (isPrime) {
  11. System.out.println(num + "是质数");
  12. } else {
  13. System.out.println(num + "不是质数");
  14. }
  15. }
英文:

You can fix it for example by introducing a boolean variable:

  1. for (int i = 0; i &lt; number; i++) {
  2. int num = arr[i];
  3. boolean isPrime = true;
  4. for (int j = 2; j &lt;= Math.sqrt(num); j++) {
  5. if (num % j == 0 &amp;&amp; num !=2) {
  6. isPrime = false;
  7. break;
  8. }
  9. }
  10. if (isPrime) {
  11. System.out.println(num +&quot;Prime&quot;);
  12. } else {
  13. System.out.println(num + &quot;Not prime&quot;);
  14. }
  15. }

huangapple
  • 本文由 发表于 2020年4月8日 01:39:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/61086061.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定