用long计算素数(Java)

用long计算素数(Java),java,string,boolean,primes,long-integer,Java,String,Boolean,Primes,Long Integer,我想写一个小程序,能够从欧拉数中找出前10位长的素数 第99位的数字是我正在搜索的数字,但是isPrim()方法没有正确响应。你看到哪里出了问题吗 我的代码 public class Main { public static final String e = "271828182845904523536028747135266249775724709369995957496696762772407663035354759457138217852516642742746639193200

我想写一个小程序,能够从欧拉数中找出前10位长的素数

第99位的数字是我正在搜索的数字,但是isPrim()方法没有正确响应。你看到哪里出了问题吗

我的代码

public class Main {

    public static final String e = "27182818284590452353602874713526624977572470936999595749669676277240766303535475945713821785251664274274663919320030599218174135966";


    public static void main(String[] args) {
        System.out.println(e);
        for (int i = 0; i < e.length() - 10; i++) {

            String str = e.substring(i, i + 10);

            long num = Long.parseLong(str);

            boolean isPrim = isPrim(num);

            if (isPrim == true) {
                System.out.println("First prime: " + num);
                break;
            }

            System.out.println(i + " " + str + " " + isPrim);

        }

    }

    public static boolean isPrim(long number) {
        if (number % 2 == 0) {
            return false;
        }
        for (int j = 3; j * j < number; j+=2) {
            if (number % j == 0) {
                return false;
            }
        }
        return true;
    }
}
公共类主{
公共静态最终字符串e=“271828182845904523560287471352662497757247093699959574966967627724076630355475945713821785251664274663932003059918174135966”;
公共静态void main(字符串[]args){
系统输出打印ln(e);
对于(int i=0;i
应该是
j*j我做了您建议的更改,但函数仍然返回错误的值它是否返回小于10位的有效素数?由于前导零,有些数字小于10位。它们返回时不是质数。这是我程序输出的一部分:111 2003059921 false 112 0030599218 false 113 0305992181 false 114 30599921817 false 115 0599218174 false我将数据类型从int更改为long,程序最终按照我想要的方式工作。非常感谢你,米哈伊尔!如果程序运行,那么你应该接受答案。正如米哈伊尔所说,你需要检查前导零。您还可以检查十的最后一位(单位)。任何以0、2、4、5、6或8结尾的十位数都不能是素数,因为它将以2或5作为因子。这将节省您对这些数字进行完全素数测试的时间。