问题:爱丽丝和鲍勃好久以后要见面了。和往常一样,他们喜欢玩一些数学游戏。这一次,爱丽丝接电话决定比赛。游戏很简单,爱丽丝说出一个整数,鲍勃必须说出这个数字是否素数。鲍勃和往常一样知道逻辑,但由于爱丽丝没有给鲍勃太多时间思考,所以鲍勃决定写一个计算机程序。通过编写一个计算数字是否素数的计算机程序来帮助Bob完成这项任务。输入
输入的第一行包含T个测试用例,后面是T行每一条T线都包含一个整数N,必须测试其素性输出
对于在单独一行中输出的每个测试用例,如果数字是素数,则为"是",否则为"否">
我的解决方案:
`import java.io.*;
import java.math.*;
import java.util.*;
class ex6
{
public static void main(String args[])throws IOException
{
try
{
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
int t=0;
t=Integer.parseInt(input.readLine());
int n=0;
int c=0;
while(c!=(t))
{
int j=0;
n=Integer.parseInt(input.readLine());
if(n==1)
System.out.println("No");
else{
for(int x=2;x<n/2;x++)
{
if(n%x==0){j++;break;}
}
if(j==0)
System.out.println("Yes");
else
System.out.println("No");
}
c++;
} }
catch(Exception e)
{return;}}}`
您的整个方法都是错误的,请阅读https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes.此外,所有这些练习都假设你使用了一个已知的算法。
这个想法是,你有一个带有布尔值的数组,其中"true"表示"素数","false"表示"非素数",你要做的是从一个包含所有真布尔值(除了1和0(的数组开始,然后从2开始消除2的倍数(标记它们为false(,然后移动到下一个素数,即3,标记它的假倍数,等等,直到你完成为止。