五位数的回文素数

题目:10301是个5位的素数。它有个特点,把数字倒过来还是它本身,具有这样特征的素数,我们称之为:回文素数。10501、10601、11311········这些都是5位的回文素数。请你计算一下,像这样的5位数的回文素数,一共有多少个?


public class Main {

	public static void main(String[] args) {
		
		int count=0;
		
		for(int i=10000;i<100000;i++){
			
			if(sushu(i)&&huiwen(i)){
				
				count++;
				//System.out.println(i);
			}
		}
		System.out.println(count);             //答案为93
	}
	
	public static boolean sushu(int n){
		
		boolean flag=true;
		
		for(int j=2;j<n;j++){
			
			if(n%j==0){
				
				flag=false;
				break;
				
			}else{
				
				flag=true;
			}		
		}
		return flag;
	}
	
	public static boolean huiwen(int n){
		
		boolean flag=true;
		
		String str=""+n;
		
		if(str.charAt(0)==str.charAt(4)&&str.charAt(1)==str.charAt(3)){
			
			flag=true;
			
		}else{
			
			flag=false;
		}
		
		return flag;	
	}
}


要编写一个程序生成一个9位数的回文素数,我们可以按照以下步骤进行: 1. **定义回文数**:一个数字从前往后读从后往前读是一样的,比如121或1001。 2. **判断素数**:对于一个整数,如果只有1它本身能够整除它,则它是素数。你可以使用试除法(埃拉托斯特尼筛)来检查一个数是否为素数,或者利用更高效的算法如 Miller-Rabin primality test 或 AKS primality test。 3. **循环生成并检查**:遍历所有可能的9位回文数,先构建前半部分,然后反转拼接形成完整的9位数,再检验其是否为素数。 下面是一个简单的示例代码,用于生成并检查9位回文素数。请注意,由于范围较大(1千万左右),这个代码可能会运行较慢,因为检查大素数的时间复杂度较高: ```c #include <stdio.h> #include <stdbool.h> bool isPalindrome(int num) { int reversed = 0; int temp = num; while (temp != 0) { reversed = reversed * 10 + temp % 10; temp /= 10; } return num == reversed; } bool isPrime(int num) { if (num <= 1) return false; if (num <= 3) return true; if (num % 2 == 0 || num % 3 == 0) return false; for (int i = 5; i * i <= num; i += 6) { if (num % i == 0 || num % (i + 2) == 0) return false; } return true; } int main() { int start = 1000000, end = 10000000; // 范围限制为9位数 for (int mid = start; mid < end; ++mid) { // 构造中间部分 int palindrome = mid * 1000000 + mid; // 前半部分后半部分相等 if (isPalindrome(palindrome) && isPrime(palindrome)) printf("%d\n", palindrome); // 打印找到的回文素数 } return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值