题目背景

小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的

情感。小 X 认为,质数是一切自然数起源的地方。

题目描述

在小 X 的认知里,质数是除了本身和 1 以外,没有其他因数的数字。

但由于小 X 对质数的热爱超乎寻常,所以小 X 同样喜欢那些虽然不是质数,

但却是由两个质数相乘得来的数。

于是,我们定义,一个数是小 X 喜欢的数,当且仅当其是一个质数,或是两

个质数的乘积。

而现在,小 X 想要知道,在 L 到 R 之间,有多少数是他喜欢的数呢?

输入输出格式

输入格式:

从文件 prime.in 中读取数据。

第一行输入一个正整数 Q,表示询问的组数。

接下来 Q 行,包含两个正整数 L 和 R,保证 L≤R。

输出格式:

输出 Q 行,每行一个整数,表示小 X 喜欢的数的个数。

输入输出样例

输入样例#1:
   1

1 6
输出样例#1:

5
【样例 1 解释】
6 以内的质数有 2、3、5,而 4 = 2 * 2,6 = 2 * 3,因此,2,3,4,5,6 都是小 X 喜欢的数,而 1 不是.
L,R <= 10^7 Q <= 10^5
分析:这道题会线性筛就可以解决了.因为线性筛就是筛出素数并且剔除掉素数与另一个数i的乘积的,对于两个素数的乘积,我们只需要判断一下i是不是素数就好了
不过因为询问较多,所以要用前缀和处理.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
int q, l, r;
long long flag[], prime[], tot = , ans, vis[], vis2[], maxn;
long long sum[];
struct node
{
int l, r;
}e[]; void init(int r)
{
for (int i = ; i <= r; i++)
{
if (!flag[i])
{
prime[++tot] = i;
vis[i] = ;
}
for (int j = ; j <= tot; j++)
{
int t = i * prime[j];
if (t > r)
break;
flag[t] = ;
if (vis[i])
vis2[t] = ;
if (i % prime[j] == )
break;
}
}
} int main()
{
scanf("%d", &q);
for (int i = ; i <= q; i++)
{
scanf("%d%d", &e[i].l, &e[i].r);
if (e[i].r > maxn)
maxn = e[i].r;
}
init(maxn);
for (int i = ; i <= maxn; i++)
{
if (vis[i])
sum[i] = sum[i - ] + vis[i];
else
sum[i] = sum[i - ] + vis2[i];
}
for (int i = ; i <= q; i++)
printf("%lld\n", sum[e[i].r] - sum[e[i].l - ]); return ;
}
 

常州模拟赛d2t1 小X的质数的更多相关文章

  1. 常州模拟赛d2t3 小X的佛光

    平日里最喜欢做的事就是蒸发学水.[题目描述]小 X 所在的城市 X 城是一个含有 N 个节点的无向图,同时,由于 X 国是一个发展中国家,为了节约城市建设的经费,X 国首相在建造 X 城时只建造 N ...

  2. 常州模拟赛d2t2 小X的密室

    题目描述 密室中有 N 个房间,初始时,小 X 在 1 号房间,而出口在 N 号房间. 密室的每一个房间中可能有着一些钥匙和一些传送门,一个传送门会 单向地 创造一条从房间 X 到房间 Y 的通道.另 ...

  3. 2014.7.7 模拟赛【小K的农场】

    3.小K的农场(farm.pas/cpp/c) [题目描述] 小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得一些含糊的信息(共m个),以下列三 ...

  4. 【20170920校内模拟赛】小Z爱学习

    所有题目开启-O2优化,开大栈空间,评测机效率为4亿左右. T1 小 Z 学数学(math) Description ​ 要说小 Z 最不擅长的学科,那一定就是数学了.这不,他最近正在学习加法运算.老 ...

  5. 常州模拟赛d4t3 字符串划分

    题目描述 给你一串由小写字母组成的字符串,希望你把它划分成一些小段,使得每一小段字符串中的字母 都不相同,并且希望分的段数尽量少. 然后,把这些小段按字典序排序后输出,中间由一个空格分隔. 例如:字符 ...

  6. 常州模拟赛d4t1 立方体

    题目描述 立方体有 6 个面,每个面上有一只奶牛,每只奶牛都有一些干草.为了训练奶牛的合作精神,它 们在玩一个游戏,每轮:所有奶牛将自己的干草分成 4 等份,分给相邻的 4 个面上的奶牛. 游戏开始, ...

  7. 常州模拟赛d3t3 两只怪物心心相印

    题目背景 从前我是一位无名的旅人,旅途中我得到了某样东西:贤者之石.我因此得到悠久的时光和漂泊的生命.1897年冬天,我一时兴起舍弃了旅人的生活. 贤者之石创造出来的,是货真价实的黄金.我的名声传遍了 ...

  8. 常州模拟赛d3t1 神在夏至祭降下了神谕

    题目描述 我们村子在过去的400年中,断绝与下界的接触,过着自给自足的生活. 夏至祭是一场迎接祖灵于夏季归来,同时祈求丰收的庆典. 村里的男人会在广场上演出夏之军和冬之军的战争.夏之军会打倒冬之军的大 ...

  9. 常州模拟赛d7t2 数组

    题目背景 HJZ 有很多玩具.他最喜欢玩的玩具是一个可以变化的数组. 题目描述 HJZ 的数组初始时有 n 个元素.他可以把一个位置上的数加上或减去一个固定的 数 x. 一天 LJZ 和 HZY 来 ...

随机推荐

  1. MFC U盘检测

    WM_DEVICECHANGE消息 查阅MSDN得知: The framework calls this member function to notify an application or dev ...

  2. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  3. Codeforces Gym 100650B Countdown (离线)

    题目链接:http://codeforces.com/gym/100650 根据给出的树和d,求出一些结点,这些结点形成子树的第d层结点数应该尽量多,具体要求可以参考题目. dfs一个结点前保存询问深 ...

  4. 46.Maximum Product Subarray(最大乘积子数组)

    Level:   Medium 题目描述: Given an integer array nums, find the contiguous subarray within an array (con ...

  5. javase(4)_数组

    一.数组概述 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属于引用类型,数组也可以看成对象,数组中的每个元素相当于该对象的成员变量. 数组中的元素可以是任意类型,包括基本类型和 ...

  6. Git学习之路

    目录 git安装 linux windows git命令 创建版本库 提交文件 仓库状态 版本回退 工作区和暂存区 工作区 暂存区 推送.下拉和克隆 推送 下拉 克隆 git应该可以说是程序员必备技能 ...

  7. docker-compose volumes指令路径映射问题

    背景:最近在自学docker容器知识,在跟着<Docker - 从入门到实践>进行 docker-compose 搭建django/postgreSQL 实例.在搭建过程中由于自己操作失误 ...

  8. 验证debug思路之从寄存器开始

    对于boot a peripherial or module 一般都是配置一系列的寄存器(有可能有时间等方便的写入读出要求). 1.确保寄存器的读写按spec要求完成.<====可以通过波形查看 ...

  9. 【php】 给数组重建索引

    array_values $a = [1,2]; unset($a[1]); $a[] = 3; print_r($a); // 输出 [0=>1,2=>3]

  10. BIOM Table-codes

    import numpy from biom.table import Table ========================================================== ...