栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

洛谷P1217 [USACO1.5]回文质数 Prime Palindromes

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

洛谷P1217 [USACO1.5]回文质数 Prime Palindromes

题目描述
题目描述

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

写一个程序来找出范围 [a,b] (5 le a < b le 100,000,000)[a,b](5≤a

当然呢我们直接暴力会时间超限

先给出时间超限的代码,当然对于小数据还是可以通过的嘿嘿。

#include
using namespace std;
bool hw(int n)
{
	int t = n;
	int sum = 0;
	while (t)
	{
		sum = sum * 10 + t % 10;
		t /= 10;
	}
	if (sum == n)
		return true;
	else
		return false;
}
bool zs(int n)
{
	for (int i = 2; i < sqrt(n); i++)
	{
		if (n % i == 0)
			return false;
	}
	return true;
}
int main()
{
	int x, y;
	cin >> x >> y;
	for (int i = x; i <= y; i++)
	{
		if (zs(i) && hw(i))
			cout << i << 'n';
	}
	return 0;
}


接下来给出完全ac的代码

接下来完成第一个任务判断回文数

bool hw(int n)
{
	int t = n;
	int sum = 0;
	while (t)
	{
		sum = sum * 10 + t % 10;
		t /= 10;
	}
	if (sum == n)
		return true;
	else
		return false;
}

懂得都懂,不多bb;

然后就是判断质数呢,还有怎样防止时间超限呢??

首先正整数除偶数2以外都不是质数,时间大约减少一半,其次通过百度可以知道位数是偶数位的一定不是回文质数除了11.。。。。。。。

bool zs(int n)//判断质数
{
	for (int i = 2; i <= sqrt(n); i++)
	{
		if (n % i == 0)
			return false;
	} 
	return true;
}
bool ws(int k)  //没有偶数位数的回文质数
{
	if (k >= 10 && k < 100 && k != 11 || k >= 1000 && k < 10000)return false;
	if (k >= 100000 && k < 1000000 || k >= 10000000 && k < 100000000)return false;
	return true;
}

这样就能过八个测试点了但是最后一个测试点是真的狗啊一直TEL

int main()
{
	int x, y;
	scanf("%d%d", &x, &y);
	if (x == 2)
		printf("2n");
	if (x % 2 == 0)
		x++;
	y = min(y, 9999999);
	for (int i = x; i <= y; i+=2)
	{
		if (hw(i) && ws(i) && zs(i))
			printf("%dn", i);
	}
	return 0;
}

如果不加min这句判断是不会过最后一个测试点的。。。。。。。

这样的话就万无一失了哈哈哈哈

目录

题目描述

题目描述


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630075.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号