java - 用 long 计算素数(Java)
问题描述
我想编写一个小程序,它能够从欧拉数中找到前 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
避免溢出。
推荐阅读
- node.js - Angular CORS 问题 - 每 5 秒查询一次端点
- php - 通过 curl 命令电报机器人触发 PHP 脚本
- java - 管道因无效的命名空间字符串而失败:'//'
- html - 无论先前元素的内容如何变化,如何对齐按钮?
- sql - 解码不工作
- javascript - Javascript将对象转换为另一个复杂的变体
- python-3.x - 如何根据另一个数据框条件替换数据框列中的值
- java - 在 ConfigurationProperties 发生更改后,使用 Spring @RefreshScope、@Conditional 注释在运行时替换 bean 注入
- javascript - 无状态功能组件方法永远不会从 Redux 存储中获取新数据,但其他方法会这样做
- python - Python中是否有与RStudio的“.rs.askForPassword”等价的东西?