编写一个程序,提示用户输入一个整数,然后输出所有素数到该整数。例如,当用户输入20时,程序应该打印
2 3 5 7 11 13 17 19
回想一下,如果数字不能被除1和它本身之外的任何数字整除,则数字是素数。
我正在尝试编写此程序,但我遇到了困难,是否有人可以告诉我如何编写此代码? 这就是我所写的,但这是完全错误的。
import java.util.Scanner;
public class PrimeNumbers
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Enter Integers: ");
int x;
int n = in.nextInt();
for (int i = 2; i < n ; i++)
{
x = i;
if (n % i != 0 && i % x != 0)
{
System.out.println(i);
}
x--;
}
}
}
答案 0 :(得分:1)
计算小于或等于N的素数 Eratosthenes的筛子。
%java PrimeSieve 25 素数&lt; = 25的数量是9
%java PrimeSieve 100 素数&lt; = 100的数量是25
%java -Xmx100m PrimeSieve 100000000 素数&lt; = 100000000的数量是5761455
%java PrimeSieve -Xmx1100m 1000000000 素数&lt; = 1000000000的数量是50847534
110MB和1100MB是您要分配的内存量 到该计划。如果您的计算机数量较少,请将此数字设为较小, 但它可能会阻止你解决非常大的问题 N的值。
class PrimeSieve {
public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
// initially assume all integers are prime
boolean[] isPrime = new boolean[N + 1];
for (int i = 2; i <= N; i++) {
isPrime[i] = true;
}
// mark non-primes <= N using Sieve of Eratosthenes
for (int i = 2; i*i <= N; i++) {
// if i is prime, then mark multiples of i as nonprime
// suffices to consider mutiples i, i+1, ..., N/i
if (isPrime[i]) {
for (int j = i; i*j <= N; j++) {
isPrime[i*j] = false;
}
}
}
// count primes
int primes = 0;
for (int i = 2; i <= N; i++) {
if (isPrime[i]){ primes++; System.out.print(i+", ");}
}
System.out.println("\nThe number of primes <= " + N + " is " + primes);
}
}
答案 1 :(得分:-1)
使用此方法检查给定的int是否为素数。
public static boolean isPrime(int a)
{
if ( a == 2)
return true;
int midpoint = Math.round(a/2);
for(int i = 2; i < midpoint; i++)
{
if(a % i == 0)
return false;
}
return true;
}
说明:
循环遍历所有数字,直到中点和模数,直到遇到0或不是。如果遇到0然后返回false,因为我们知道它不是素数,如果我们没有遇到零,那么我们返回true,因为它是素数。
我们循环到中点,因为不需要进一步循环。
您可以通过
在循环中实现它for (int i = 2; i < n ; i++)
{
if (isPrime(i))
{
System.out.println(i);
}
}