回文质数(初级版)(HeTaoL4#E)

先看题:

题目描述

给定一个数字𝑛,判断其是不是回文质数。 回文质数的定义就是该数字既是一个回文数,也是一个质数。回文数:形如12211221,1232112321都是一个回文数。质数:2,3,5,7,11,132,3,5,7,11,13等

也就是保证它是回文数的前提下,还得让它在是一个质数。

或者保证它是质数的前提下,再去保证它是一个回文数。

输入格式

一个整数n

输出格式

如果是回文质数,输出 𝑌𝑒𝑠 否则输出 𝑁𝑜

输入数据 1

383

输出数据 1

Yes

输入数据 2

22

输出数据 2

No

数据规模与约定

对于 100%的数据,0<𝑛≤10^5

呃,今天的话我给大家带来一种非常不靠谱的方法,但也是一种非常靠谱的方法,简单来说就是动歪脑筋的方法。

由于这道题他数组规模的约定,n最大只需要是10的5次方,那么就让我们有机可乘,我们可以通过打表的方法将从1~10^5的所有回文质数全都打出来。可能非常费手与肝,但大家可以去网上找表。

不过既然看到了我的文章那就算幸运,现在我把表直接放在这里。

	int c[1000] = { 5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929,10301,10501,10601,11311,11411,12421,12721,12821,13331,13831,13931,14341,14741,15451,15551,16061,16361,16561,16661,17471,17971,18181,18481,19391,19891,19991,30103,30203,30403,30703,30803,31013,31513,32323,32423,33533,34543,34843,35053,35153,35353,35753,36263,36563,37273,37573,38083,38183,38783,39293,70207,70507,70607,71317,71917,72227,72727,73037,73237,73637,74047,74747,75557,76367,76667,77377,77477,77977,78487,78787,78887,79397,79697,79997,90709,91019,93139,93239,93739,94049,94349,94649,94849,94949,95959,96269,96469,96769,97379,97579,97879,98389,98689};

接下来我们就可以直接使用便利的方法。输入一个数遍历表中的每一个数,如果相等,那么就输出Yes,如果不相等就输出No。但是问题又来了,遍历次数应该是多少?由于我们现在事先还不知道一共有多少个,所以我们还需要新建一个程序,用一个for循环,如果这个数不等于0,那么ans++,然后得出我们最后的数量。

#include <iostream>
using namespace std;
int main()
{
	int ans=0;
	int c[1000] = { 5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929,10301,10501,10601,11311,11411,12421,12721,12821,13331,13831,13931,14341,14741,15451,15551,16061,16361,16561,16661,17471,17971,18181,18481,19391,19891,19991,30103,30203,30403,30703,30803,31013,31513,32323,32423,33533,34543,34843,35053,35153,35353,35753,36263,36563,37273,37573,38083,38183,38783,39293,70207,70507,70607,71317,71917,72227,72727,73037,73237,73637,74047,74747,75557,76367,76667,77377,77477,77977,78487,78787,78887,79397,79697,79997,90709,91019,93139,93239,93739,94049,94349,94649,94849,94949,95959,96269,96469,96769,97379,97579,97879,98389,98689};
	for(int i=0;i<1000;i++)
	{
		if(c[i]!=0)
		{
			ans++;
		}
	}
	cout<<ans;
	return 0;
}

结果是111

我们还有,那就是如何要输出yes还是no?其实非常简单,我们只需要定义一个布尔变量f,然后的话先初始化为0,表示这个数暂还不是回文质数,如果找到了,那么就将f变成1,然后跳出循环,下面,条件判断if如果f是不成立的,那么就输出no,否则就什么也不用干。

if(!f) cout<<"No";

接下来,就是正式代码

#include<iostream>
using namespace std;
int main()
{
    int c[1000] = { 5,7,11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929,10301,10501,10601,11311,11411,12421,12721,12821,13331,13831,13931,14341,14741,15451,15551,16061,16361,16561,16661,17471,17971,18181,18481,19391,19891,19991,30103,30203,30403,30703,30803,31013,31513,32323,32423,33533,34543,34843,35053,35153,35353,35753,36263,36563,37273,37573,38083,38183,38783,39293,70207,70507,70607,71317,71917,72227,72727,73037,73237,73637,74047,74747,75557,76367,76667,77377,77477,77977,78487,78787,78887,79397,79697,79997,90709,91019,93139,93239,93739,94049,94349,94649,94849,94949,95959,96269,96469,96769,97379,97579,97879,98389,98689};
    int a;
	cin>>a;
	bool f=0;
	for(int i=0;i<111;i++)
	{
		if(a==c[i])
		{
			cout<<"Yes";
			f=1;
			break;
		}
	 } 
	if(!f) cout<<"No";
}
    

AC:

 100 Accepted

#状态分数耗时内存占用
#1 Accepted100ms7.6 MiB
#2 Accepted100ms7.5 MiB
#3 Accepted101ms7.6 MiB
#4 Accepted101ms7.5 MiB
#5 Accepted101ms7.6 MiB
#6 Accepted100ms7.7 MiB
#7 Accepted100ms7.5 MiB
#8 Accepted101ms7.6 MiB
#9 Accepted101ms7.7 MiB
#10 Accepted101ms7.6 MiB

好了,本期文章就到这里,总而言之,记住这么6句话:(点个赞吧求求了)

打表过样例,暴力出奇迹 
要是想把分数偷,贪心打表加暴搜 
快读快写火车头,马上AC不用愁
(这是某位大佬用户的座右铭)
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值