如何打印直到用户输入的整数的质数?

问题描述 投票:0回答:4

大家下午好

我目前正在尝试创建一个执行以下操作的程序:

开发一个代码,打印用户输入的所有质数 数字。输出示例:

 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.
}

}

我使用的限制变量有问题吗?任何帮助将非常感激。

java loops nested boolean primes
4个回答
3
投票

您的

isPrime()
方法返回错误的结果。 for循环条件错误
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 的整除性,您只需要检查

sqrt(N)
即可。 要查找范围 (N) 内的素数,请使用 埃拉托斯特尼筛法


2
投票

你的实际问题是number变量。这是您的解决方案。不需要变量number。以下是您的解决方案

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

0
投票
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+" ");
    }
}
}
}

0
投票

使用 C++ 程序编写一个程序,提示用户输入一个整数,然后打印出该整数之前的所有素数。例如,当用户输入 20 时,程序应打印 2 3 5 7 11 13 17 19。回想一下 如果一个数不能被除了 1 和它本身之外的任何数整除,那么它就是素数。

© www.soinside.com 2019 - 2024. All rights reserved.