java中的N个素数

时间:2018-05-27 19:05:11

标签: java

所以我在java中编写了这段代码,它应该在屏幕上输出从1到n的数字(由用户给出),它应该写出#34; -prime"靠近那些最好的。

import java.util.Scanner;
public class primeMass {

    public static void main(String args[])
    {
        Scanner sc = new Scanner(System.in);
        int n;
        int i,j;
        System.out.print("Dati n: ");
        n = sc.nextInt();

        for(i=1;i<=n;i++)
            for(j=2;j<=n/2;j++)
            {
                if(i%j==0)
                    System.out.println(i);
                else System.out.println(i +"-prime");

    }}

}

如果我输入6例如我得到:

Dati n: 6
1-prime
1-prime
2
2-prime
3-prime
3
4
4-prime
5-prime
5-prime
6
6

我对此很陌生,而且我真的在努力学习算法,你能不能告诉我如何更改我的程序以便输出正确的值,并向我解释我做错了什么?谢谢

更新:

我已经完成了,谢谢大家帮助我:这就是结果:

import java.util.Scanner; 公共类primeMass {

public static void main(String args[])
{
    Scanner sc = new Scanner(System.in);
    int n;
    int i,j;
    boolean gasit = false;
    System.out.print("Dati n: ");
    n = sc.nextInt();

    for(i=1;i<=n;i++) {
        gasit=false;
        for(j=2;j*j<=i;j++)
        {
            if(i%j==0) gasit=true;}
        if(!gasit) {System.out.println(i+"-prime");}
        else {
            System.out.println(i);}

    }
}

}

2 个答案:

答案 0 :(得分:1)

在内循环的每次迭代中打印一些东西。

相反,您应该在所有迭代完成后打印,例如

(string key, MyObject myObject) = fooDictionary.Where(x => !x.Value.Boo).ExtensionMethod();

此外,你不应该进入boolean found = false; for(j=2;j<=n/2;j++) { if(i%j==0) found = true; } if (!found) { System.out.println(i + "-prime"); } else { System.out.println(i); } :你可能意味着n/2(一个数字没有比自身更大的因素);但是你可以使它更紧凑,因为你不必检查大于i/2的因子。或者,换句话说,sqrt(i)

所以你可以进行循环声明:

j * j <= i

答案 1 :(得分:0)

问题是第二个循环一直持续到n/2,它应该到i/2以检查i是否为素数。正如评论中所建议的那样,素数检查算法的更优化版本将持续到sqrt(i)

下一个问题是你以错误的方式得出结论,如果在第一种情况下if(i%j==0)你说不是素数,否则你说它是素数,这不是必须的。您应该在[2:i/2]之间迭代整个值间隔,以得出i为素数的结论。