[英]Prime Number Sequence Java
So what my program does is that it reads user input and prints out a series of prime numbers that leads up to the input. 因此,我的程序要做的是读取用户输入并打印出导致输入的一系列素数。 So for example, if I input 20 the sequence should print out 2 5 7... etc. until it reaches 19 (since 20 is not a prime number) The only issue is when I run the program 1 keeps on printing out.
因此,例如,如果我输入20,则该序列应打印出2 5 7 ...等,直到达到19(因为20不是素数),唯一的问题是当我运行程序1时继续打印。 Here is my method for figuring out whether a number is prime or not.
这是我计算数字是否为质数的方法。
public boolean isPrime(int number)
{
int prime;
for(prime = 2; prime < number; prime++)
{
if (number % prime == 0)
{
if(number == 1)
{
return false;
}
return false;
}
}
return true;
}
I have read multiple forums and solutions and none seem to help. 我已经阅读了多个论坛和解决方案,但似乎都无济于事。 I am completely stuck.
我完全被困住了。
Putting 推杆
if (number < 2) return false;
as the first statement into your method should do the trick. 作为方法中的第一个语句应该可以解决问题。
Your loop is never entered when number
is 1
(your loop would start at 2
). 当
number
为1
时,永远不会进入循环(循环将从2
开始)。 Move the test before the loop, and you never use prime
after the loop - so I would make it local to the loop. 将测试移到循环之前,然后再也不要在循环之后使用
prime
-因此我将其设置为循环局部。
public boolean isPrime(int number)
{
if (number == 1)
{
return false;
}
for (int prime = 2; prime < number; prime++)
{
if (number % prime == 0)
{
return false;
}
}
return true;
}
You might optimize things a bit though, for example - eliminate all values less than 2
(as @luk2302 suggested) and a little math to eliminate even values and only test up to the square root. 但是,您可能会进行一些优化,例如-消除所有小于
2
值(如@ luk2302建议),并进行一些数学运算以消除偶数,并且仅测试平方根。
public boolean isPrime(int number) {
if (number < 2) {
return false;
} else if (number == 2 || number == 3) {
return true;
} else if (number % 2 == 0) {
return false;
}
double sq = Math.sqrt(number);
for (int prime = 3; prime <= sq; prime += 2) {
if (number % prime == 0) {
return false;
}
}
return true;
}
This is simple way of finding prime numbers between 1 to n. 这是查找介于1到n之间的质数的简单方法。 Hope it's clear.
希望清楚。
int n=20;
System.out.println("All Prime Numbers Between 1 to "+n);
boolean isPrime;
for (int i = 2; i <= n; i++) {
isPrime = true;
for (int j = 2; j <=Math.sqrt(i); j++) {
if (i % j == 0) {
isPrime = false;
break;
}
}
if (isPrime)
System.out.print(i + " ");
}
Ouput- Ouput-
All Prime Numbers Between 1 to 20
2 3 5 7 11 13 17 19
This is what i did: 这就是我所做的:
package CH10;
public class PrimeSequence implements Sequence {
private int n = 2;
public int next() {
if (isPrime(n)) {
int primeN = n;
n++;
return primeN;
} else {
n = nextPrime(n);
int primeN = n;
n++;
return primeN;
}
}
private boolean isPrime(int n) {
boolean test = true;
if (n == 2 || n == 3) {
test = true;
} else if (n % 2 == 0 || n % 3 == 0 || isPerfectSquare(n)) {
test = false;
} else if (isMultipleOfPrime(n)) {
test = false;
}
return test;
}
private int nextPrime(int n) {
while (!isPrime(n)) {
n++;
nextPrime(n);
}
return n;
}
private boolean isPerfectSquare(int n) {
int sqrt = (int) Math.sqrt(n);
if (Math.pow(sqrt, 2) == n) {
return true;
}
return false;
}
private boolean isMultipleOfPrime(int n) {
boolean test = false;
for (int i = (int) Math.sqrt(n); i > 3; i--) {
if (n % i == 0) {
test = true;
}
}
return test;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.