题意:给你一个n,输入n个数,然后输入m,接下来有m个询问,每一个询问为[l,r],然后输出在区间内[l,r]内f(p)的和,p为[l,r]的素数,f(p)的含义为在n个数中是p的倍数的个数。

思路:先打出10000000内的素数,然后统计每一个素数在n个数中的倍数的个数记录在num[i]中,在每次询问的是找出l,r在素数表的位置,然后计算就可以。

 #include <cstdio>
#include <cstring>
#include <algorithm>
#define maxn 10000100
using namespace std; int n,m,cnt;
int x[maxn];
bool vis[maxn];
int vis1[maxn];
int f[maxn];
int l[maxn],r[maxn];
int num[maxn];
int sum[maxn]; void Getprime()
{
cnt=;
vis[]=vis[]=true;
memset(vis,false,sizeof(vis));
for(int i=; i<=maxn; i++)
{
if(!vis[i])
{
f[cnt++]=i;
for(int j=*i; j<=maxn; j+=i)
{
vis[j]=true;
}
}
}
} int main()
{
Getprime();
while(scanf("%d",&n)!=EOF)
{
memset(vis1,,sizeof(vis1));
int max1=;
for(int i=; i<n; i++)
{
scanf("%d",&x[i]);
vis1[x[i]]++;
max1=max(max1,x[i]);
}
for(int i=; i<cnt; i++)
{
for(int j=f[i]; j<=max1; j+=f[i])
{
if(vis1[j])
{
num[f[i]]+=vis1[j];
}
}
}
memset(sum,,sizeof(sum));
for(int i=; i<cnt; i++)
{
if(i==)
{
sum[i]=num[f[i]];
}
else
{
sum[i]=sum[i-]+num[f[i]];
} }
scanf("%d",&m);
for(int i=; i<=m; i++)
{
scanf("%d%d",&l[i],&r[i]);
if(l[i]>)
{
printf("0\n");
continue;
}
int ll=lower_bound(f,f+cnt,l[i])-f;
int rr=lower_bound(f,f+cnt,r[i])-f;
if(f[cnt-]<=r[i])
{
rr=cnt-;
}
if(f[ll]>r[i])
{
printf("0\n");
continue;
}
if(f[rr]>r[i])
{
rr=rr-;
}
if(l[i]==r[i])
{
printf("%d\n",num[l[i]]);
}
else
printf("%d\n",sum[rr]-sum[ll-]);
}
}
return ;
}

cf C Bear and Prime Numbers的更多相关文章

  1. Codeforces 385C Bear and Prime Numbers

    题目链接:Codeforces 385C Bear and Prime Numbers 这题告诉我仅仅有询问没有更新通常是不用线段树的.或者说还有比线段树更简单的方法. 用一个sum数组记录前n项和, ...

  2. Codeforces 385C - Bear and Prime Numbers(素数筛+前缀和+hashing)

    385C - Bear and Prime Numbers 思路:记录数组中1-1e7中每个数出现的次数,然后用素数筛看哪些能被素数整除,并加到记录该素数的数组中,然后1-1e7求一遍前缀和. 代码: ...

  3. Codeforces 385C Bear and Prime Numbers(素数预处理)

    Codeforces 385C Bear and Prime Numbers 其实不是多值得记录的一道题,通过快速打素数表,再做前缀和的预处理,使查询的复杂度变为O(1). 但是,我在统计数组中元素出 ...

  4. CodeForces - 385C Bear and Prime Numbers (埃氏筛的美妙用法)

    Recently, the bear started studying data structures and faced the following problem. You are given a ...

  5. CF385C Bear and Prime Numbers 数学

    题意翻译 给你一串数列a.对于一个质数p,定义函数f(p)=a数列中能被p整除的数的个数.给出m组询问l,r,询问[l,r]区间内所有素数p的f(p)之和. 题目描述 Recently, the be ...

  6. CodeForces 385C Bear and Prime Numbers 素数打表

    第一眼看这道题目的时候觉得可能会很难也看不太懂,但是看了给出的Hint之后思路就十分清晰了 Consider the first sample. Overall, the first sample h ...

  7. Codeforces Round #226 (Div. 2)C. Bear and Prime Numbers

    /* 可以在筛选质数的同时,算出每组数据中能被各个质数整除的个数, 然后算出[0,s]的个数 [l,r] 的个数即为[0,r]的个数减去[0,l]个数. */ #include <stdio.h ...

  8. codeforces 385C Bear and Prime Numbers 预处理DP

    题目链接:http://codeforces.com/problemset/problem/385/C 题目大意:给定n个数与m个询问区间,问每个询问区间中的所有素数在这n个数中被能整除的次数之和 解 ...

  9. CF385C Bear and Prime Numbers

    思路: 需要对埃氏筛法的时间复杂度有正确的认识(O(nlog(log(n)))),我都以为肯定超时了,结果能过. 实现: #include <bits/stdc++.h> using na ...

随机推荐

  1. 分享一个牛逼的PHP无限极分类生成树方法,巧用引用(转)

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了.这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了. function g ...

  2. MapReduce实战:查找相同字母组成的单词

    1.项目需求 一本英文书籍包含成千上万个单词,现在我们需要在大量的单词中,找出相同字母组成的所有单词 2.数据集 下面是一本英文书籍截取的一部分单词内容(书籍内容是随意写的,主要目的是实现这种需求) ...

  3. java面试32问

    第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements ...

  4. 关于echarts绘图,主题的更换

    echarts主题进行更换步骤: 模块化单文件引入(推荐) 1.查看自己想要的主题  echarts官网 http://echarts.baidu.com/echarts2/doc/example/t ...

  5. 9.30 noip模拟试题

    时限均为1s,内存 256MB 1.某种密码(password.*) 关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY. ...

  6. Android之如何混淆代码和相关配置

    昨天,客户想看一下目前项目开发到什么程度了,于是需要将项目签名打包成apk,结果打包的时候出错了,吃惊,什么情况.等成功打包以后,安装起来发现部分功能又报错了,囧,所幸最后还是解决了.在这里记录一下遇 ...

  7. .Net 4.0 Convert Object to XDocument

    将Object转换为XDocment对象 代码如下: C# – Object to XDocument using System; using System.Collections.Generic; ...

  8. UISearchBar 光标不出现的问题

    app支持ios7,在UINavBar 里面加入搜索框,结果光标一直出现不了. 解决办法如下: searchBar.tintColor = [UIColor blueColor];

  9. 十三、C# 事件

    1.多播委托 2.事件 3.自定义事件   在上一章中,所有委托都只支持单一回调. 然而,一个委托变量可以引用一系列委托,在这一系列委托中,每个委托都顺序指向一个后续的委托, 从而形成了一个委托链,或 ...

  10. JS特殊符号

    反斜杠用来在文本字符串中插入省略号.换行符.引号和其他特殊字符. 代码 输出 \' 单引号 \" 双引号 \& 和号 \\ 反斜杠 \n 换行符 \r 回车符 \t 制表符 \b 退 ...