题目描述
如果一个正整数只有 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 到 202106052 中,有多少个纯质数?
先判断“纯质数”(每一位都由2,3,5,7组成的数),再从纯质数中找质数,就不会超时了
#include<iostream>
#include<cmath>
using namespace std;
int ans;
int prime(int x)
{
if(x<2) return 0;
if(x==2) return 1;
for(int i=2; i<=sqrt(x); ++i)
{
if(x%i==0) return 0;
}
return 1;
}
int chun_prime(int x)
{
while(x)
{
int temp = x%10;
if(temp!=2 && temp!=3 && temp!=5 &&temp!=7)
{
return 0;
}
x /= 10;
}
return 1;
}
int main()
{
for(int i=2; i<=20210605; ++i)
{
if(chun_prime(i) && prime(i)) ans++;
}
cout<<ans;
return 0;
}