蓝桥杯-纯质数,题目分析及代码详细注解,判断质数的方法

这篇博客探讨了如何使用埃氏筛法找到20210605以内所有质数,并进一步判断这些质数是否为纯质数,即每一位都是2、3、5、7中的一个。通过编写C++代码实现这一过程,最终计算出符合条件的纯质数数量。文章还提到了另一种判断质数的方法,即根据素数两性的定理。虽然计算量较大,但程序运行时间控制在了20秒以内。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

本题为填空题,只需要算出结果

如果一个正整数只有 1 和它本身两个约数,则称为一个质数(又称素数)。前几个质数是:2,3,5,7,11,13,17,19,23,29,31,37,⋅⋅⋅ 如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如:2,3,5,7,23,37 都是纯质数,而 11,13,17,19,29,31 不是纯质数。当然 1,4,35 也不是纯质数。请问,在 1 到 20210605 中,有多少个纯质数?

分析题目

纯质数:该数为质数且每一个十进制位都是2、3、5、7中的某一个数。

查找范围:题目为20210605,根据纯质数的定义可知该范围内合理的最大值为7777777,是一个7位数,将8位数的查找范围减小到7位数。

代码思路:先通过埃氏筛筛选出1到7777777之间的质数,然后检查筛选出的数的每一位是否都由2、3、5、7中的数组成,保存符合该条件的数。

代码实现

#include<stdlib.h>
#include<stdio.h>
#include<vector>
#include<set>
using namespace std;
vector<int> prime;//变长数组prime用于保存筛选出的质数
vector<int> result;//变长数组result用于保存从prime中筛选出的纯质数
bool p[7777778]={0};//标志位,在埃氏筛中用于标记p[i]中i是否是为质数,false代表是,truw代表不是
int a[4]={2,3,5,7};//用于与数组prime中数的每一位作比较。
void Find_Prime()//埃氏筛法筛选2到7777777之间的质数
{
	for(int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值