cf C Bear and Prime Numbers
题意:给你一个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的更多相关文章
- Codeforces 385C Bear and Prime Numbers
题目链接:Codeforces 385C Bear and Prime Numbers 这题告诉我仅仅有询问没有更新通常是不用线段树的.或者说还有比线段树更简单的方法. 用一个sum数组记录前n项和, ...
- Codeforces 385C - Bear and Prime Numbers(素数筛+前缀和+hashing)
385C - Bear and Prime Numbers 思路:记录数组中1-1e7中每个数出现的次数,然后用素数筛看哪些能被素数整除,并加到记录该素数的数组中,然后1-1e7求一遍前缀和. 代码: ...
- Codeforces 385C Bear and Prime Numbers(素数预处理)
Codeforces 385C Bear and Prime Numbers 其实不是多值得记录的一道题,通过快速打素数表,再做前缀和的预处理,使查询的复杂度变为O(1). 但是,我在统计数组中元素出 ...
- CodeForces - 385C Bear and Prime Numbers (埃氏筛的美妙用法)
Recently, the bear started studying data structures and faced the following problem. You are given a ...
- CF385C Bear and Prime Numbers 数学
题意翻译 给你一串数列a.对于一个质数p,定义函数f(p)=a数列中能被p整除的数的个数.给出m组询问l,r,询问[l,r]区间内所有素数p的f(p)之和. 题目描述 Recently, the be ...
- CodeForces 385C Bear and Prime Numbers 素数打表
第一眼看这道题目的时候觉得可能会很难也看不太懂,但是看了给出的Hint之后思路就十分清晰了 Consider the first sample. Overall, the first sample h ...
- Codeforces Round #226 (Div. 2)C. Bear and Prime Numbers
/* 可以在筛选质数的同时,算出每组数据中能被各个质数整除的个数, 然后算出[0,s]的个数 [l,r] 的个数即为[0,r]的个数减去[0,l]个数. */ #include <stdio.h ...
- codeforces 385C Bear and Prime Numbers 预处理DP
题目链接:http://codeforces.com/problemset/problem/385/C 题目大意:给定n个数与m个询问区间,问每个询问区间中的所有素数在这n个数中被能整除的次数之和 解 ...
- CF385C Bear and Prime Numbers
思路: 需要对埃氏筛法的时间复杂度有正确的认识(O(nlog(log(n)))),我都以为肯定超时了,结果能过. 实现: #include <bits/stdc++.h> using na ...
随机推荐
- 搭建docker私有仓库 笔记
抄送消息到企业微圈 avalon组件 twitterCopy/twitterCopy 说明 说明 说明 说明 说明 说明 该组件提供接口 开发者可以吧 有需要分享到微圈的的信息 发布到微圈中去. 应用 ...
- 安装在ubuntu12.04上安装gcc4.8
因为gcc4.8支持最新的c++11标准,所有开始c++11标准系列学习前,请按照gcc4.8,方便边学习边写代码练习. 安装编译好的gcc4.8 sudo add-apt-repository pp ...
- HUNNU--湖师大--11407--It Is Cold
[F] It Is Cold Dr. Ziad Najem is known as the godfather of the ACPC. When the regional contest was ...
- [AngularJS + Webpack] Requiring Templates
With Angular, most of the time you're specifying a templateUrl for your directives and states/routes ...
- android 39 共享首选项
共享首选项SharedPreferences:用于存储少量数据,大量数据则存入文件或者sd卡.以键值对保存数据. activity.java package com.sxt.day06_05; imp ...
- linux的文件系统及节点表
linux的文件系统及节点表 一 linux的文件系统1 我们都知道当我们安装linux时会首先给系统分区,然后我们会把分区格式化成EXT3格式的文件系统.那么在linux系统中还有没有其他的文件系 ...
- linux下mysql配置文件my.cnf详解
basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出存放着字符集的目录. datadir = path 从给定目录读取数据库文件 ...
- 搬移到GitHub Page啦~
GitHub: https://github.com/BOT-Man-JL/ Page: https://BOT-Man-JL.github.io/
- js鼠标事件
今天遇到一个非常奇怪而又搞笑的事情:给一个a标签添加一个鼠标移动上时给一个事件,我给其添加的是一个onMouseMove事件,结果在IE6 7 8 9和GOOLE中都很正常,结果在Firox中出现问题 ...
- java按照集合中元素的属性进行排序示例代码
public class Student { private String name; private int age; private int id; public Student() { sup ...