首页 > 解决方案 > 显示回文素数

问题描述

我正在尝试制作一个程序来显示前 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;
    }

}

标签: javamethodspalindrome

解决方案


  1. start当它不是质数时,您不会增加,因此当您遇到第一个非质数时,您会遇到无限循环。把你start++的 if 语句放在外面。

  2. 你的isPalindrome()方法坏了。该变量x被缩减为 create reverse,但随后您将reverse其与修改后的版本进行比较,x而不是其原始值。

  3. 你只增加counter每 10 个素数,所以这最终会打印 500 个回文素数,而不是 50 个。

奖励:如果您存储找到的每个素数,然后仅检查先前找到的素数的除法,则查找素数会更快。


推荐阅读