键盘接收两个正整数,输出它们之间的最大6个回文素数。要求每行输出两个数。如果不足6个,要报告实际个数的程序
先写一个判断回文数的函数
再写一个判断素数的函数
接收两个数mn,判断大小,让大的在前
然后从大到小的循环,判断是否是回文数且素数,如果是,输出,并count++
判断如果count==6就break
如果count<6,输出count
import java.util.*;
class Testmethod {
public boolean testsushu(int numbers) {
for (int i = 2; i <= numbers / 2; i++) {
if (numbers % i == 0) {
return false;
}
}
return true;
}
public boolean testhuiwenshu(int numbers) {
int x = 0;
int code = 0;
if (numbers < 10) {
return true;
}
while (numbers > x) {
x = x * 10 + numbers % 10;
numbers /= 10;
code++;
}
if (code % 2 != 0) {
if (x == numbers) {
return true;
} else {
return false;
}
} else {
if (x / 10 == numbers) {
return true;
} else {
return false;
}
}
}
}
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = 0;
int b = 0;
int count = 0;
a = sc.nextInt();
b = sc.nextInt();
Testmethod test = new Testmethod();
for (int i = b; i >= a; i--) {
if (test.testsushu(i) && test.testhuiwenshu(i)) {
System.out.println(i);
count++;
}
if (count%2 == 0){
System.out.println("\r");
}
if (count == 6){
break;
}
}
if (count < 6) {
System.out.println(a + "~" + b + "之间只有" + count + "个符合要求!");
}
}
}
可以先获取输入的两个正整数,然后逆序遍历这两个正整数之间的所有整数,然后依次对每一个数判断是否是素数与回文数,如果都是的且符合要求的数不足6个,则累加到存储结果的数组中,然后计数个数,然后判断完所有的数,分情况打印结果即可,代码如下:
参考链接:
#include <stdio.h>
// 判断是否是素数
int prime(int n){
int i;
if(n<2){
return 0;
}
for(i=2;i<n;i++){
if(n%i==0){
return 0;
}
}
return 1;
}
// https://zhuanlan.zhihu.com/p/277572883
// 判断是否是回文数
int palindrome(int num){
int n,m=0;
int s = num;
while(s!=0)
{
n = s%10; //n是s的末位数
m = m*10 +n; //把s的末位数放到m的末位
s = s/10; //去掉末位数的新s
}
if(num==m){
return 1;
}else{
return 0;
}
}
int main(void){
int result[6];
int m,n,i,num=0;
printf("请输入两个正整数:");
scanf("%d%d",&m,&n);
for(i=n;i>=m;i--){ // 从大到小逆序遍历两个正整数之间所有的数
// 如果当前的数既是素数又是回文数,则计数+1,且如果将前6个满足要求的数存储到数组中
if(prime(i)==1&&palindrome(i)==1){
if(num<6){
result[num]=i;
}
num++;
}
}
// https://qb.zuoyebang.com/xfe-question/question/48fafd5672360351ce605750d0478b6a.html
// https://baike.baidu.com/item/%E5%9B%9E%E6%96%87%E6%95%B0/1830170?fr=aladdin
// 打印结果
if(num>=6){
for(i=0;i<6;i+=2){
printf("%d %d\n",result[i],result[i+1]);
}
}else{
printf("%d到%d之间素数的个数是:%d\n",m,n,num);
}
return 0;
}