Как печатать простые числа с точностью до введенного пользователем целого числа?

#java #loops #nested #boolean #primes

#java #циклы #вложенный #логическое #простые числа

Вопрос:

Добрый день всем,

В настоящее время я пытаюсь создать программу, которая выполняет следующее:

Разработайте код, который будет печатать все простые числа с точностью до введенного пользователем числа. Пример вывода:

  Enter an integer (2 or above): 19

 The prime numbers up to you integer are:

 2

 3

 5

 7

 11

 13

 17

 19
 

К сожалению, существует также список «требований», которые также должны быть выполнены:

  • Если пользователь вводит число ниже 2, ваша программа должна напечатать сообщение о том, что число недопустимо, а затем остановиться.
  • Число является простым числом, если оно не делится ни на одно число, кроме 1 и самого себя.
  • Для этой программы, чтобы проверить число, является ли оно простым, вы должны попытаться разделить число на каждое значение от 2 до числа-1, чтобы увидеть, делится ли оно равномерно или нет. Например:

    —Чтобы увидеть, является ли 5 простым числом: 5 не делится равномерно на 2, 5 не делится равномерно на 3, 5 не делится равномерно на 4, поэтому 5 является простым числом

    —Чтобы увидеть, является ли 9 простым числом: 9 не делится равномерно на 2, 9 делится равномерно на 3, поэтому 9 не является простым числом

  • Эта программа требует, чтобы вы писали вложенные циклы (то есть цикл внутри цикла). Один цикл будет использоваться для подсчета от 2 до номера пользователя, чтобы вы могли проверить каждое из этих чисел, чтобы увидеть, что оно простое. Для каждого из этих чисел x:
  • Вложенный цикл проверит все значения от 2 до x-1, чтобы увидеть, равномерно ли x делится на какое-либо из них.
  • Вам нужно будет использовать логическую переменную (также называемую переменной флага), чтобы помочь вам определить, следует ли выводить число на экран

Приведенный выше вопрос касается моего кода, приведенного ниже:

импортируйте java.util.*;

открытый класс Something3 {

 public static void main(String[] args) {

    Scanner kbd = new Scanner(System.in);

    //Variable declaration.
    int limit, number;

    //get input till which prime number to be printed
    System.out.print("Enter an integer (2 or above): ");
    limit = kbd.nextInt();
    kbd.close();

    //Will print prime numbers till the limit (user entered integer).
    number = 2;

    if (limit >=2) {
        System.out.println("The prim numbers up to your interger are: "   limit "n");
        for(int i = 0; i <= limit;){         
            //print prime numbers only
            if(isPrime(number)){
                System.out.println(number  "n");
                i  ;
            } 
            number = number   1;
        }
    }
    else
        System.out.println("Number is not vaild");

}

//Prime number is not divisible by any number other than 1 and itself
//return true if number is prime. 
public static boolean isPrime(int number){
    for(int i=2; i==number; i  ){
        if(number%i == 0){
            return false; //Number is divisible, thus not prime.
        }
    }
    return true;//The number is prime.
}
 

}

Является ли проблема с переменной limit, которую я использую? Любая помощь будет высоко оценена.

Комментарии:

1. В основном for используйте number вместо I.

Ответ №1:

ваш isPrime() метод возвращает неверный результат. если условие цикла неверно i==number , оно должно быть i < number

 public static boolean isPrime(int number){
    for(int i=2; i*i <= number; i  ){
        if( number % i == 0){
            return false; // Number is divisible, thus not prime.
        }
    }
    return true; //The number is prime.
}
 

Чтобы проверить простое число или нет, вам не нужно проверять делимость от 2 до N, все, что вам нужно, проверить upto sqrt(N) .
Чтобы найти простые числа в диапазоне (N), используйте решето Эратосфена

Ответ №2:

Вашей реальной проблемой была числовая переменная. Вот ваше решение. Нет необходимости в переменном числе. Ниже приведено ваше решение

 import java.util.*;

public class Something3 {

public static void main(String[] args) {

    Scanner kbd = new Scanner(System.in);

    // Variable declaration.
    int limit;

    // get input till which prime number to be printed
    System.out.print("Enter an integer (2 or above): ");
    limit = kbd.nextInt();
    kbd.close();

    if (limit >= 2) {
        System.out.println("The prim numbers up to your interger are: "
                  limit   "n");
        for (int i = 1; i <= limit; i  ) {
            // print prime numbers only
            if (isPrime(i)) {
                System.out.println(i);
            }
        }
    } else
        System.out.println("Number is not vaild");

}

// Prime number is not divisible by any number other than 1 and itself
// return true if number is prime.
public static boolean isPrime(int n) {
    if (n % 2 == 0)
        // The only even prime is 2.
        return (n == 2);
    for (int i = 3; i * i <= n; i  = 2) {
        if (n % i == 0)
            return false;
    }
    return true;
}
}
 

Комментарии:

1. Указание на эту проблему также помогло. Большое вам спасибо, что нашли время даже для программирования ответа.

2. Первоначально isPrime() опубликованный метод не удался для n == 2. Я отредактировал его и добавил комментарий.

Ответ №3:

 import java.util.Scanner;
class prime
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
System.out.println("enter the value of n");
int n=sc.nextInt();
for(int i=2;i<=n;i  )
{
    int count=0;
    for(int j=1;j<=i;j  )
    {
        if(i%j==0)
        {
            count  ;
        }
    }
    if(count==2)
    {
        System.out.println(i " ");
    }
}
}
}