我必须打印一个数字列表1-100,这些数字都是素数。必须将这些素数打印到单独的.txt文件中。
import java.io.*;
public static boolean isPrime(int number)
{
int division = 0;
if(number<1)
{
return false;
}
for(division=1; division<=number; division++)
{
if(number%division==0)
{
division+=1;
}
if((number%division>2) || (number==1) || (number==-1))
{
return false;
}
}
return true;
}
public static void main(String[] args) throws IOException
{
PrintWriter fileToWrite = new PrintWriter("primeNumberList.txt");
for(int currentNumber=1; currentNumber<=100; currentNumber++)
{
if(isPrime(currentNumber))
{
fileToWrite.println(currentNumber);
}
}
fileToWrite.close();
System.out.println("The prime numbers have been listed in the file primeList.txt");
}
}
我有这个代码,每当我运行它时,只会打印数字。我能做些什么来改变它?
答案 0 :(得分:0)
这看起来像是一个家庭作业问题,因此我将避免使用完整的代码解决方案。
另外,你的最后一句似乎是截止的 - 我猜测你是说你打印的数字不是素数。
您可能想要关注的一件事是Sieve of Eratosthenes。 isPrime
,正如您所定义的那样,无法正常工作。
第一个条件if (number % divisor) == 0
,总是对于1是真的(所以迭代器不应该从那里开始),如果它对任何值都是真的&GT; 1,然后number
不是素数,函数应返回false
。
另外值得注意的是,范围不应为division<=number
,因为number%number
始终为0。
isPrime
中的第二个条件从找不到的角度来看并没有用。
Eratosthenes的Sieve是一个更优雅的寻找者,而不是仅仅运行低于数字的所有整数,但它的实现留给了学生。
祝你好运!答案 1 :(得分:0)
您的isPrime功能不起作用,请尝试以下代码: -
public static boolean isPrime(int number)
{
for(int division = 2; division < number; division++) {
if(*MATHS FOR PRIME*)
return false;
}
return true;
}
从2开始,即第一个素数,并循环所有数字,然后查看它是否均匀分配。我已经拿出了数学但你应该能够通过快速谷歌找到它。
答案 2 :(得分:0)
这是你的问题:
if((number%division>2) || (number==1) || (number==-1))
第一个条件是如果数字和除法的模数大于2则返回false。 ,这将在循环的第一次迭代中对于大于3的每个数字发生。 正确的循环将是这样的:
for(division=2; division<number; division++)
{
if(number%division == 0)
{
return false;
}
}