我想写一个小程序,它能够从欧拉数中找出前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;
}
}
应该是j * j <= number
,否则你会将素数的平方视为素数。即你的方法说9
是素数,因为没有低于sqrt(9)
的分频器。
此外,您的代码可能会找到短于10位的素数,因为它会检查E的所有10位数子串,包括那些带有前导零的子串,例如0452353602
。
此外,您需要将j
的类型更改为long
以避免溢出。