用long计算素数(Java)
我想写一个小程序,能够从欧拉数中找出前10位长的素数 第99位的数字是我正在搜索的数字,但是isPrim()方法没有正确响应。你看到哪里出了问题吗 我的代码用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
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作为因子。这将节省您对这些数字进行完全素数测试的时间。