C语言洛谷题目分享(11)回文质数

目录

1.前言

2.题目:回文质数

1.题目描述

2.输入格式

3.输出格式

4.输入输出样例

5.题解

3.小结


1.前言

哈喽大家好,今儿继续为大家分享一道蛮有价值的一道题,希望大家多多支持喔~

2.题目:回文质数

1.题目描述

因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以151 是回文质数。

写一个程序来找出范围 [a,b](5≤a<b≤100,000,000)(一亿)间的所有回文质数。

2.输入格式

第一行输入两个正整数 a 和 b。

3.输出格式

输出一个回文质数的列表,一行一个。

4.输入输出样例

5.题解

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int l, r;
bool check1(int x)//检查位数
{
	if((1000 <= x && x <= 9999) || (100000 <= x && x <= 999999)) return 0;//不知道&&和||优先级的可以打个括号 
	return 1;
} 
bool check2(int x)//检查是否回文
{
	int a[10], flag = 1;
	while (x > 0)
	{
		a[flag] = x % 10;
		x /= 10;
		flag++;
	} 
	for (int i = 1; i <= flag / 2; i++)
		if(a[i] != a[flag-i]) return 0;//不符合回文 
	return 1;
} 
bool check3(int x)//检查是否为质数 
{
	if(x == 2) return 1;
	for(int i = 2; i <= sqrt(x); i++)
		if(x % i == 0) return 0;
	return 1;
}
int main()
{
	scanf("%d %d", &l, &r);
	if(l == 2) printf("2\n");//一定要注意2!!! 
	if(l % 2 == 0) l++; 
	r = min(9999999, r);//再大的数都不可能是回文质数
	for(int i = l; i <= r; i = i + 2)//枚举每一个奇数
	{
		if(check1(i) == 0) continue;
		if(check2(i) == 0) continue;
		if(check3(i) == 0) continue;
		printf("%d\n", i);
	}	
	return 0;
}

这道题题意非常简单,看似就俩个条件,先判断是否回文再判断是否为质数,但如果当你真的这样做了,那么tle等着你(不要问我我为什么会知道),所以当你正式开始敲代码的啥时候,先尝试一下如何优化当前代码。

在正式开始讲解之前,先需要给大家模拟一个东西,即一个偶位数的回文数(除了11)一定不是质数,演算如下:

考虑偶位数位的回文数的特性:由于回文数的特性,其前半部分和后半部分是完全相同的。因此,一个偶位数位的回文数可以表示为ABBA或ABCCBA其中A和B是任意数字,且A不为0,因为回文数的首位不能是0。可以通过简单证明,这个数可以被11整除。

仅以四位数举例:ABBA,千位和百位先除以11,_(B-A)BA,百位和十位除以11,得AA,则该数可以被11整除,别的同理。

综上所述,该命题成立。

证明完成后,我们便可以把这个作为限制条件实现在我们的代码中,判断这个数是否为奇数位,如果不是则直接continue,来达到节省时间的目的。

此外,还有要注意的点,就是每当输入r和l的时候,可以先判断r是否为偶数(因为偶数一定不是质数),如果l是偶数,则+1处理。另外还有r,如果r大于100000000,则就将r限制在100000000(题目条件)。

整体思路如下:

  • 1.先判断是否为奇数位
  • 2.再判断是否回文
  • 3.在判断是否为质数
  • 主函数中注意r和l的输入处理,用单个for循环嵌套三个函数来判断该书是否为回文质数。

3.小结

今天的题目分享到这里就结束了,希望大家都继续加油努力,一起进步!

相关推荐
Gomiko5 分钟前
JavaScript DOM 原生部分(五):事件绑定
开发语言·前端·javascript
lly20240611 分钟前
Redis 发布订阅
开发语言
A0_張張13 分钟前
记录一个PDF盖章工具(PyQt5 + PyMuPDF)
开发语言·python·qt·pdf
巴拉巴拉~~13 分钟前
Flutter 通用下拉选择组件 CommonDropdown:单选 + 搜索 + 自定义样式
开发语言·javascript·ecmascript
ZHang......14 分钟前
LeetCode 1114. 按序打印
java·开发语言·算法
欧特克_Glodon25 分钟前
C++医学图像处理经典ITK库用法详解<四>: 图像分割模块功能
c++·图像处理·图像分割·itk
缺点内向26 分钟前
如何在 C# 中重命名 Excel 工作表并设置标签颜色
开发语言·c#·excel
仰泳的熊猫27 分钟前
1083 List Grades
数据结构·c++·算法·pat考试
Можно29 分钟前
深入理解 JavaScript 函数:分类、特性与实战应用
开发语言·javascript
淼淼76334 分钟前
工厂方法模式
开发语言·c++·windows·qt·工厂方法模式