用long计算素数(Java)

问题描述 投票:1回答:1

我想写一个小程序,它能够从欧拉数中找出前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;
    }
}
java string boolean primes long-integer
1个回答
2
投票

应该是j * j <= number,否则你会将素数的平方视为素数。即你的方法说9是素数,因为没有低于sqrt(9)的分频器。

此外,您的代码可能会找到短于10位的素数,因为它会检查E的所有10位数子串,包括那些带有前导零的子串,例如0452353602

此外,您需要将j的类型更改为long以避免溢出。

© www.soinside.com 2019 - 2024. All rights reserved.