题目描述:
我们称一个数是质数,而且数位中出现了 5的数字是有趣的。例如 5, 59, 457 都是有趣的,而 15, 7不是。求 1 到 100000 中有趣的数的个数。
解题报告:
1:比赛时建议直接暴力,不写任何算法。这里为了学习,使用了一些基础的算法。
2:先用快速筛法将1到100000的素数求出,然后写一个判断位数5的函数。根据这两点开始计数。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 100000+10;
ll prime[N], judge[N] = {1, 1}, 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;
if(!i%prime[j])break;
}
}
}
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;
printf("%lld\n", cnt);
return 0;
}