public class Q3
{
public static void main(String args[]){
int i, j;
int Max = 1000;
//It's obvious that the first fifty prime numbers are less than 1000.
int counter = 1;
while (counter <= 50){
for (i = 2; i < Max; i++){
for (j = 2; j < i; j++){
if ( i % j == 0){
break;
}
}
if (j >= i){
System.out.printf("%s ", i);
counter++;
}
if(counter % 10 == 0){
System.out.print("\n");
}
}
}
}
}
这是我写的一个程序,列出前50个素数,每行10个。但是,由于while循环,它无法正常工作。执行后,该程序列出了小于1000的所有素数。似乎while循环根本不起作用。谁能告诉我原因?非常感谢。
答案 0 :(得分:1)
素数由第一个for
循环生成。 while主体只执行一次。
您可以移除while
,而是在for
上使用不同的条件:
for (i = 2; counter <= 50; i++){
答案 1 :(得分:0)
你有一个大问题,真正的代码如下:
int i, j;
int Max = 1000;
//It's obvious that the first fifty prime numbers are less than 1000.
int counter = 0;
for (i = 2; i < Max && counter < 50; i++){
for (j = 2; j < i; j++){
if ( i % j == 0){
break;
}
}
if (j >= i){
printf("%d ", i);
counter++;
if(counter % 10 == 0){
printf("\n");
}
}
}
输出是: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229
答案 2 :(得分:0)
为什么不编写boolean isPrime(int number)函数? 您必须检查它是否为真,如果是,则增加计数器并打印数字。 这是一个天真的实现,我已经看到了一些其他更好的实现:
boolean isPrime(int number) {
if (number < 2 || number % 2 == 0) {
return true;
}
double sqrt = Math.sqrt(number);
for (int i = 3; i <= sqrt; i += 2) {
if (number % i == 0) {
return true;
}
}
return false;
}
在你的内容中:
for (i = 2; i < max; i++) {
if (isPrime(i)) {
counter++;
// print number, print new line if needed
}
}