代码厨师 "Primality Test" 错误的答案



问题:爱丽丝和鲍勃好久以后要见面了。和往常一样,他们喜欢玩一些数学游戏。这一次,爱丽丝接电话决定比赛。游戏很简单,爱丽丝说出一个整数,鲍勃必须说出这个数字是否素数。鲍勃和往常一样知道逻辑,但由于爱丽丝没有给鲍勃太多时间思考,所以鲍勃决定写一个计算机程序。通过编写一个计算数字是否素数的计算机程序来帮助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,标记它的假倍数,等等,直到你完成为止。

最新更新