我们称一个数是质数,而且数位中出现了 55 的数字是有趣的。例如 5, 59, 4575,59,457 都是有趣的,而 15, 715,7 不是。求 11 到 100000100000 中有趣的数的个数。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 100000+10;
ll prime[N];//数字里面存储的是质数
ll judge[N] = {1, 1};//基本判断下表i不是质数的标为 1
ll num_prime; //质数个数
void init(){
for(ll i=2; i<N; ++i){
if(!judge[i])prime[num_prime++] = i;
for(ll j=0; j<num_prime && i*prime[j]<N; ++j){
judge[i*prime[j]] = 1;//把i的与比i小的质数乘积标记为不是质数
if(!i%prime[j])break; //判断是不是到i这位质数
}
}
}
//函数实现判断位数有没有五存在
ll judge_dig(ll n){
while(n){
if(n%10 == 5)return 1;
n /= 10;
}
return 0;
}
int main(){
ll cnt = 0;
init();
for(ll i=1; i<=100000; ++i)
if(!judge[i] && judge_dig(i))++cnt;//统计位数有5的质数的总个数
printf("%lld\n", cnt);
return 0;
}