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