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.小结

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

相关推荐
学习使我变快乐2 分钟前
C++:const成员
开发语言·c++
凭栏落花侧4 分钟前
决策树:简单易懂的预测模型
人工智能·算法·决策树·机器学习·信息可视化·数据挖掘·数据分析
500了1 小时前
Kotlin基本知识
android·开发语言·kotlin
hong_zc1 小时前
算法【Java】—— 二叉树的深搜
java·算法
吱吱鼠叔2 小时前
MATLAB计算与建模常见函数:5.曲线拟合
算法·机器学习·matlab
嵌入式AI的盲3 小时前
数组指针和指针数组
数据结构·算法
一律清风3 小时前
QT-文件创建时间修改器
c++·qt
不知所云,3 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
风清扬_jd3 小时前
Chromium 如何定义一个chrome.settingsPrivate接口给前端调用c++
前端·c++·chrome
安冬的码畜日常3 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine