计蒜客 2020 蓝桥杯大学 B 组省赛模拟赛(一)有趣的数字

题目描述:

我们称一个数是质数,而且数位中出现了 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;
}
发布了109 篇原创文章 · 获赞 2 · 访问量 4554

猜你喜欢

转载自blog.csdn.net/jun_____/article/details/104033101