题目描述
本题为填空题,只需要算出结果
如果一个正整数只有 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