Description
素数字符串
题目描述
我们将素数从小到大依次书写,可以得到一个字符串"23571113⋯",已知一个数码d(0≤d≤9),求字符串在区间[L,R]之间的多少个d?
输入
第一行是一个整数T(1≤T≤10000),表示样例的个数。 每个样例是一行, 为3个整数,区间L,R,(1≤L≤R≤1000000)和数码d。 区间从1开始计数。
输出
每行输出一个样例的结果。
样例输入
2 1 8 1 1 8 4样例输出
3 0
解题思路:欧拉筛,字符转换,前缀和。
欧拉筛可以按从小到大的顺序最快找到素数, 然后把找到的每个素数,通过函数把它转换成 字符串,最后把该字符串传入 前缀和公式中 打表生成 前缀和数组。
*注:MAXN 是 大致较为接近能够得到 长度 1e6 的素数字符串的整数。怎么得到的?问就是试出来的。
先看一份超时代码:
思路是 先把所有的素数字符串 都拼接在一个数组中(primechar),然后再进行前缀和打表,最后喜提超时。忒么的难办?那就都别办了! 直接省去中间商,得到一个素数,就直接转换打表。
#include <stdio.h>
#include <stdlib.h>

最低0.47元/天 解锁文章
655

被折叠的 条评论
为什么被折叠?



