Java 寻找素数

Java 寻找素数,java,Java,我试着写一些代码,其中包含了一个最大数,并给出了2到最大数之间的所有素数。这几乎是可行的,但我有一个问题,打印所有的素数,但它也打印相同的素数被乘以的结果。例如,它将打印2,3,4,5,7,9,它们都是0到10之间的素数,但它也会打印额外的数字,即2*2、3*3等等。请指导我正确的方向,这样我才能完成这个项目 public class PrimeNumbers { public static void main( String[] args ) { int ma

我试着写一些代码,其中包含了一个最大数,并给出了2到最大数之间的所有素数。这几乎是可行的,但我有一个问题,打印所有的素数,但它也打印相同的素数被乘以的结果。例如,它将打印2,3,4,5,7,9,它们都是0到10之间的素数,但它也会打印额外的数字,即2*2、3*3等等。请指导我正确的方向,这样我才能完成这个项目

public class PrimeNumbers 
{
    public static void main( String[] args )
    {
        int max = 400;

        //Runs through all the numbers between 2 and max, checks if
        //the number is prime and prints it
        for( int num = 2; num < max; ++num )
        {
            if( isPrimeNumber( num ) )
            {
                System.out.println( num );
            }
        }
    }

    //method to find all prime numbers
    public static boolean isPrimeNumber( int number )
    {
        for( int mod = 2; mod < Math.sqrt( number ); ++mod )
        {
            if( number % mod == 0 )
            {
                return false;
            }
        }

        return true;
    }
}
公共类素数
{
公共静态void main(字符串[]args)
{
int max=400;
//运行2和max之间的所有数字,检查是否
//数字是素数并打印出来
对于(int num=2;num
您的结束条件是错误的,您需要一直到
sqrt(num)

for (int mod = 2; mod <= Math.sqrt(number); ++mod)

for(int mod=2;mod对于未来的用户,我发布这个素数程序。您只需给出您希望素数返回的最大值即可

import java.util.Scanner;

public class prim {

    public static void main(String[] args) {

        int x = 2;
        int y = 2;
        int i = 0;
        int m = 0;
        int t = 1;
        int j = 2;
        int cal = 0;

        Scanner keyboard = new Scanner(System.in);
        System.out.println("please enter for how many numbers \nyou wanna check if their prime");

        m = keyboard.nextInt();

        for (i = 0; i <= m; i++) {
            while (j <= x) {
                t = x % y;

                if (t == 0) {
                    cal = cal + 1;
                }

                y++;
                j++;
            }

            if (cal == 1) {
                System.out.println("Prime number: " + x);
            }

            cal = 0;
            x++;
            y = 2;
            j = 2;
        }
    }
}
import java.util.Scanner;
公共类prim{
公共静态void main(字符串[]args){
int x=2;
int y=2;
int i=0;
int m=0;
int t=1;
int j=2;
int-cal=0;
扫描仪键盘=新扫描仪(System.in);
System.out.println(“请输入要检查其素数的数字数量”);
m=键盘.nextInt();

对于(i=0;i 4不是素数,9不是素数…即使编译器可能会内联
Math.sqrt
调用,我建议您自己做。我知道这一点,这就是为什么我说它会打印所有素数加上一些额外的非素数。这个问题是问为什么“素数”数字在(2*2等)之后打印你的答案没有解决这个问题它确实解决了这个问题,OP的方法只对平方数是错误的,这就是为什么他对4和9得到
true
的原因。是的,这确实解决了我的问题,仍然不确定为什么,但效果很好now@ed1234567:您可以查看示例
4
9
的原因。此处
Math.sqrt(数字)
将是
2
3
,因此循环将在
1
2
结束,因此将永远找不到唯一的分隔符。太棒了,感谢您的帮助。我完全理解为什么它以前不起作用。请注意,此实现在时间复杂性方面效率低下。筛选方法要快得多。