4.10回文素数是指一个数同时为素数和回文数 。例如,131是一个素数,同时也是一个回文数,754也 是回文素数。编程编写,显示20个回文素数。每行显示10个数,数字之间用空格隔开。显示如下。 2 3

寻找并打印前20个回文素数
该代码示例展示了两种方法找到并打印20个回文素数。第一种方法通过遍历数组并检查素数及回文性质,第二种方法使用单独的素数和回文检查函数。程序每10个数换行,符合回文素数条件的数字将被打印。
package bookTest2;

public class primeNumber {
    public static void main(String[] args) {
        /*
        4.10,
回文素数是指一个数同时为素数和回文数 。例如,131是一个素数,同时也是一个回文数,754也
是回文素数。编程编写,显示20个回文素数。每行显示10个数,数字之间用空格隔开。显示如下。
2 3 5 7 11 101 131 151 181 191
313 353 373 383 727 757 787 797 919 929
     1.求出素数
     2.对于这个数 第一个 等于最后一个 然后  求回文
(就是求素数)
2 3 5 7 11
         */
        int[] arr = new int[1000];
        int number=0 ;
        int count = 0;
      outer:  for (int i = 2; i <1000 ; i++) {
             for (int j = 2; j <i ; j++) {
                 if (i %j == 0) {
                     continue outer;
                 }
          }
              arr[number]= i;
             number++;
         // System.out.println(i);输出出 所有的质数
          // 放 数组里面 做回文  让它们每个数 第一位和最后一位 相等
        }
        int a =0,b=0,c=0;

        for (int i = 0; i <arr.length ; i++) {
            if (arr[i] == 0) {
                break;
            }
                   // System.out.println((arr[i]));
            //把素数存放在数组里面了
            if (arr[i] >0 && arr[i]<10) {
                  a = arr[i];
                  b = arr[i];
               // System.out.println();
            }
            if (arr[i] >9 && arr[i]<100) {
                 a = arr[i]/10;
                b = arr[i]-a*10;
            }
            if (arr[i] >99 && arr[i]<1000) {
                 a = arr[i]/100;
                 c = (arr[i]-a*100)/10;
                 b = arr[i]-a*100-c*10;
              //  System.out.println(c);

            }
            if (a == b) {
               // System.out.print(arr[i]+" ");可以输出出来了  然后分组 10个一组
                System.out.print(arr[i]+" ");
                count++;//在外边设置一个变量  计数
                if (count%10==0) {//是这个变量取余数10 分两部分
                    System.out.println();
                }
            }
        }
    }

}

第二种方法 推荐第二种 我也是在网上看到的

package trainTest;

public class test {
    
    public static boolean isPrime(int n){
        for(int i=2; i*i<=n;i++){
            if(n % i ==0)
                return false;
        }
        return true;
    }
    public static boolean isPalindrome(int n){
        String s = String.valueOf(n);
        int low = 0;
        int heigh =s.length() - 1;
        while(low < heigh){
            if(s.charAt(low)!=s.charAt(heigh)){
                return false;  // 不是回文
            }
            low ++;
            heigh --;
        }
        return true;
    }
    public static void main(String[] args) {
        int count = 0;
        int n = 2;
        do{
            if(isPrime(n)&&isPalindrome(n)) {
                count ++;
                if(count %10 ==0){
                    System.out.printf("%5s%n",n);
                }else{
                    System.out.printf("%5s",n);
                }
            }
            n ++;
        }while(count < 20);
    }
}

运行截图

### 回文素数的概念 回文素数一个既满足素数条件又满足回文数条件的特殊值。具体来说: - **素数**是在大于1的自然中,除了1其自身之外,无法被其他任何自然整除的[^2]。 - **回文数**是一个数字序列正向读取与反向读取完全相同的,例如 `121` 或者 `343`。 因此,回文素数可以理解为同时具备上述两种特性的,比如 `131` `101` 都是典型的回文素数实例[^1]。 --- ### 判断方法 #### 素数判断逻辑 对于给定的一个 \( n \),可以通过以下方式验证它是否为素数: - 如果 \( n \leq 1 \),则不是素数; - 对于范围内的所有可能因子(即从2到\( \sqrt{n} \)之间的所有整),如果存在某个数能整除 \( n \),那么 \( n \) 不是素数;否则它是素数。 ```python def is_prime(num): if num < 2: return False for i in range(2, int(num**0.5) + 1): if num % i == 0: return False return True ``` #### 回文数判断逻辑 通过字符串反转的方式比较原与其逆序形式是否一致来判定是否为回文数。此过程可描述如下: - 将数字转换成字符串表示; - 反转该字符串并与原始字符串对比; - 若两者相同,则表明这是一个回文数[^3]。 ```python def is_palindrome(num): return str(num) == str(num)[::-1] ``` --- ### 综合实现 为了找出一定范围内所有的回文素数,需结合以上两部分功能设计完整的解决方案。下面展示了一个简单的 Python 实现方案用于接收用户输入并打印符合条件的结果列表[^4]。 ```python def find_palindromic_primes(limit): result = [] for candidate in range(1, limit + 1): if is_prime(candidate) and is_palindrome(candidate): result.append(candidate) return result if __name__ == "__main__": N = int(input("请输入一个正整作为上限:")) palindromic_primes = find_palindromic_primes(N) for pp in palindromic_primes: print(pp) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值