我正在一个项目中进行工作,该项目需要一个起始数字和一个质数,然后在起始数字之后输出一个表格,其中包含每个质数,直到达到质数为止。我写了一个程序来查找素数,但是我无法将输出格式化为表格格式。我知道我需要使用嵌套的for循环来构建表,但是我不确定如何开始。到目前为止,这是我的代码:
class Tester2{
public static void main(String[] args){
int number = 750000; //starting number
int nofn = 12; //number of primes to find
int primecount = 0;
while(primecount < nofn){
if(isPrime(number)){
primecount ++;
System.out.println(primecount + " " +number);
}
number++;
}
}
//determins if num is prime
private static boolean isPrime(int num){
int divisor = 2;
boolean itIsPrime;
while(num % divisor != 0){
divisor++;
}
if(divisor == num)
itIsPrime = true;
else
itIsPrime = false;
return itIsPrime;
}
}
当前我的代码返回
1 750019
2 750037
3 750059
4 750077
5 750083
6 750097
7 750119
8 750121
9 750131
10 750133
11 750137
12 750151
我正在寻找它返回
Row #: 1--> 750019 750037 750059 750077 750083 750097 750119 750121 750131 750133
Row #: 2--> 750137 750151
答案 0 :(得分:1)
您在这里。我还改进了您的isPrime
方法来循环直到sqrt(num)
而不是num
,所以现在应该更快了:
public class Test {
public static void main(String[] args) {
int number = 750000; // starting number
int nofn = 100; // number of primes to find
int primecount = 0;
int row = 0, col = 0;
while (primecount < nofn) {
if (isPrime(number)) {
primecount++;
if (col++ == 0)
System.out.print(String.format("%3d-->", ++row));
System.out.print(String.format(" %6d", number));
if (col == 10) {
System.out.println();
col = 0;
}
}
number++;
}
}
private static boolean isPrime(int num) {
final int last = (int) Math.sqrt(num);
for (int divisor = 2; divisor <= last; ++divisor) {
if (num % divisor == 0)
return false;
}
return true;
}
}
输出:
1--> 750019 750037 750059 750077 750083 750097 750119 750121 750131 750133
2--> 750137 750151 750157 750161 750163 750173 750179 750203 750209 750223
3--> 750229 750287 750311 750313 750353 750383 750401 750413 750419 750437
4--> 750457 750473 750487 750509 750517 750521 750553 750571 750599 750613
5--> 750641 750653 750661 750667 750679 750691 750707 750713 750719 750721
6--> 750749 750769 750787 750791 750797 750803 750809 750817 750829 750853
7--> 750857 750863 750917 750929 750943 750961 750977 750983 751001 751007
8--> 751021 751027 751057 751061 751087 751103 751123 751133 751139 751141
9--> 751147 751151 751181 751183 751189 751193 751199 751207 751217 751237
10--> 751259 751273 751277 751291 751297 751301 751307 751319 751321 751327
答案 1 :(得分:0)
每次需要打印时,您都在使用System.out.println。每次找到素数时,都会打印新行。您需要做的是使用System.out.print函数来打印您的信息。然后,在找到10个质数后,实现功能System.out.println。
if(isPrime(number)){
primecount ++;
if(primecount%10==0)
System.out.println(number+" ");
else
System.out.print(number+" ");
}
答案 2 :(得分:0)
不清楚表的含义。如果只想在一行上打印10个质数,则可以执行以下操作:
while(primecount < nofn){
if(isPrime(number)){
primecount ++;
System.out.print(primecount + " " +number);
if (primecount%10==0)
System.out.println();
}
number++;
}
答案 3 :(得分:0)
要打印行号,这应该是代码。
public static void main(String[] args) {
int number = 750000; //starting number
int nofn = 12; //number of primes to find
int primecount = 0;
int rowCount = 1;
System.out.print(rowCount + "--> ");
while (primecount < nofn) {
if (isPrime(number)) {
primecount++;
System.out.print(number + " ");
if (primecount % 10 == 0) {
System.out.println();
rowCount++;
System.out.print(rowCount + "--> ");
}
}
number++;
}
}
答案 4 :(得分:0)
我的意思是,如果您只想在输入8个条目后跳过它,则必须按照嵌套方式进行循环。
这不是一个很好的解决方案,因为它可能会卡在while循环中,而且代码也不是很漂亮,但是我想它可以这样工作:
已编辑
int rowCount = 0;
while(primecount < nofn){
if(isPrime(number)){
if(primeCount% 10 == 0) {
rowCount++;
System.out.println("Row #: " + rowCount + "-->");
}
primecount ++;
System.out.print(" " +number); // print not printl
}
number++;
}