java - 显示回文素数
问题描述
我正在尝试制作一个程序来显示前 50 个素数回文,每行有 10 个数字。这是我到目前为止的代码,但是运行时没有任何反应。我看过类似的解决方案,但似乎找不到错误所在。任何帮助,将不胜感激。
import java.lang.Math;
public class PalindromicPrime {
public static void main(String[] args) {
int counter = 1;
int start = 2;
isPalindrome(start);
isPrime(start);
while (counter <= 50) {
if (isPrime(start) && isPalindrome(start)) {
System.out.print(start + " ");
if (counter % 10 == 0) {
System.out.println();
counter++;
}
start++;
}
}
}
public static boolean isPalindrome(int x) {
int reverse = 0;
while(x > 0) {
reverse = reverse * 10 + x % 10;
x = x / 10;
}
if (reverse == x) {
return true;
}
else {
return false;
}
}
public static boolean isPrime(int x) {
if (x % 2 == 0 && x != 2) {
return false;
}
int sqr = (int)Math.sqrt(x);
for (int i = 3; i <= sqr; i += 2) {
if(x % i == 0) {
return false;
}
}
return true;
}
}
解决方案
start
当它不是质数时,您不会增加,因此当您遇到第一个非质数时,您会遇到无限循环。把你start++
的 if 语句放在外面。你的
isPalindrome()
方法坏了。该变量x
被缩减为 createreverse
,但随后您将reverse
其与修改后的版本进行比较,x
而不是其原始值。你只增加
counter
每 10 个素数,所以这最终会打印 500 个回文素数,而不是 50 个。
奖励:如果您存储找到的每个素数,然后仅检查先前找到的素数的除法,则查找素数会更快。
推荐阅读
- ios - 如何使用 1 个函数将 2 个属性保存到核心数据(Swift4)
- corda - 当音量很高时,在收集签名期间性能会变慢
- excel - 如何在 OLE2 ABAP 中对受保护的 excel 文件启用过滤器
- javascript - 如何获取每个id的数组的最小值
- node.js - 有什么方法可以自定义 LUIS 中任何话语的分数?
- kubernetes - 如何使用 kubectl 显示自己的信息?
- django - Django:存储所有应用程序通用功能的位置
- python - 在 if __ is __ 语句中使用 .lower 或 'or' 会导致 python 3.6 中的 if 语句流不正确
- rust - How to end borrow when an Option is None
- python-3.x - 尽管路径正确存在,但当我无法访问 sql 路径时,我应该看哪个方面?