嘿所以我试图创建一个打印出前100个素数的程序。这是我的代码,但是它不会打印出前100个但是从2到100的素数。我在这里做错了什么使得它只打印出那些不是前100的蚂蚁?
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
public class Prime {
public static void main(String[] args) {
int maxCount = 100;
int[] values = new int[maxCount];
int temp = 3;
boolean prime = true;
for (int j = 1; j < maxCount; ++j) {
values[j] = j + 1;
if (values[j] == 2) {
System.out.println(values[j]);
}
}
for (int j = 2; j < maxCount; ++j) {
if (values[j] % 2 == 0)
prime = false;
else {
boolean prime2 = true;
double test = Math.sqrt(values[j]);
int divisor = 3;
while (prime2 && (divisor <= test)) {
if (values[j] % divisor == 0) {
prime2 = false;
} else divisor += 2;
}
if (prime2)
System.out.println(values[j]);
}
}
}
}
答案 0 :(得分:0)
你正在循环迭代直到j变为100,并且在每次迭代时,无论是否找到素数,j都会递增。 所以有类似的东西: -
while(maxCount<100){
if(number_is_prime){
increment maxCount;
}
else{
continue;
}
答案 1 :(得分:0)
你循环到j < maxCount
,你应该循环,直到数组中的元素数等于maxCount
。为此,您需要在以下固定代码中使用另一个val_cnt
的计数器。
import java.io.*;
import java.util.*;
import java.lang.*;
import java.text.*;
public class Prime {
public static void main(String[] args) {
int maxCount = 100;
int[] values = new int[maxCount];
int temp = 3;
int val_cnt = 0;
values[val_cnt++] = 2;
System.out.println(2);
for (int j = 3; val_cnt < maxCount; ++j) {
boolean prime = true;
if (j % 2 == 0)
prime = false;
else {
double test = Math.sqrt(j);
int divisor = 3;
while (prime && (divisor <= test)) {
if (j % divisor == 0) {
prime = false;
} else divisor += 2;
}
if (prime) {
values[val_cnt++] = j;
System.out.println(j);
}
}
}
}
}
答案 2 :(得分:0)
您正在迭代循环直到100
。但是你想要打印前100个素数,而不是1到100之间的素数。因此,每次发现数字为素数时,只需将count
(计算打印的素数的数量)递增到当1
为count
时,100
并退出循环。以下是打印前100个素数的简单方法:
int count = 0,flag=0;
for(int i=2;count<100;i++){
flag = 0;
for(int j=2;j<i;j++){
if(i%j == 0){
flag ++;
break;
}
}
if(flag == 0){
System.out.println(i);
count++;
}
}
答案 3 :(得分:0)
如果找到素数,则仅增加j
的值
重新格式化您的代码,
for (int j = 2; j < maxCount;) {
if (values[j] % 2 == 0){
prime = false;
j++;
}
else {
boolean prime2 = true;
double test = Math.sqrt(values[j]);
int divisor = 3;
while (prime2 && (divisor <= test)) {
if (values[j] % divisor == 0) {
prime2 = false;
} else divisor += 2;
}
if (prime2)
System.out.println(values[j]);
j++;
}
答案 4 :(得分:0)
试试这个
class PrimeNumbers {
public static void main (String[] args) {
int i =0; int num =0;
String primeNumbers = "";
for (i = 1; i <= 100; i++) {
int counter=0;
for(num =i; num>=1; num--) {
if(i%num==0) {
counter = counter + 1;
}
}
if (counter ==2) {
primeNumbers = primeNumbers + i + " ";
}
}
System.out.println("Prime numbers from 1 to 100 are :");
System.out.println(primeNumbers);
}
}