题目大意:

给多个区间的询问,在询问区间内每一个出现的素数去计算所有数中有多少个数能被这个素数整除

然后将所有素数得到的对应值求和

这里因为初始给定的数不超过10000000,最多670000不到的素数

而后面给定的区间到达1e9是没意义的,只要后面超过10000000都按最后一个数表示即可

然后将素数的标号作为树状数组的点,保存对应的点前缀和

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
#define ll long long
#define N 10001000
#define M 670000
#define pii pair<int,int>
#define lowbit(x) x&(-x)
int prime[M+] , tot ;
bool check[N+]; void get_prim()
{
for(int i= ; i<=N ; i++){
if(!check[i]) prime[tot++] = i;
for(int j= ; j<tot ; j++){
if((ll)i*prime[j]>N) break;
check[i*prime[j]] = true;
if(i%prime[j]==) break;
}
}
} int Hash1(int x)
{
if(x>) return ; //664579是10000000内素数的数目
int l= , r=tot- , ans=;
while(l<=r){
int m = (l+r)>>;
if(prime[m]>=x){ans = m , r=m-;}
else l=m+;
}
return ans+;
} int Hash2(int x)
{
if(x>) return ;
int l= , r=tot- , ans=;
while(l<=r){
int m = (l+r)>>;
if(prime[m]<=x){ans = m , l=m+;}
else r=m-;
}
return ans+;
} ll sum[M]; void add(int x , int v){for(int i=x ; i<=tot ; i+=lowbit(i)) sum[i] += v;} ll query(int x)
{
ll ret = ;
for(int i=x ; i> ; i-=lowbit(i)) ret+=sum[i];
return ret;
} void fenjie(int x)
{
int mx = (int)sqrt(x+0.5);
for(int i= ; i<tot ; i++){
if(prime[i]*prime[i]>x) break;
if(x%prime[i]==){
// cout<<"in: "<<i<<" "<<prime[i]<<endl;
add(i+ , );
while(x%prime[i]==) x/=prime[i];
}
}
if(x>){
int pos = lower_bound(prime , prime+tot , x)-prime;
add(pos+ , );
}
} int main() {
// freopen("a.in" , "r" , stdin);
// freopen("out.txt" , "w" , stdout);
get_prim();
int n , m , s , t;
while(~scanf("%d" , &n))
{
for(int i= ; i<n ; i++){
int x ;
scanf("%d" , &x);
fenjie(x);
}
scanf("%d" , &m);
while(m--){
scanf("%d%d" , &s , &t);
int p1 = Hash1(s) , p2 = Hash2(t);
// cout<<p1<<" "<<p2<<endl;
printf("%I64d\n" , query(p2)-query(p1-));
}
}
}

Codeforce385C 树状数组+素因子分解的更多相关文章

  1. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  2. bzoj1878--离线+树状数组

    这题在线做很麻烦,所以我们选择离线. 首先预处理出数组next[i]表示i这个位置的颜色下一次出现的位置. 然后对与每种颜色第一次出现的位置x,将a[x]++. 将每个询问按左端点排序,再从左往右扫, ...

  3. codeforces 597C C. Subsequences(dp+树状数组)

    题目链接: C. Subsequences time limit per test 1 second memory limit per test 256 megabytes input standar ...

  4. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  5. BZOJ 3529: [Sdoi2014]数表 [莫比乌斯反演 树状数组]

    3529: [Sdoi2014]数表 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1399  Solved: 694[Submit][Status] ...

  6. BZOJ 3289: Mato的文件管理[莫队算法 树状数组]

    3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MBSubmit: 2399  Solved: 988[Submit][Status][Di ...

  7. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

  8. 【BZOJ-3881】Divljak AC自动机fail树 + 树链剖分+ 树状数组 + DFS序

    3881: [Coci2015]Divljak Time Limit: 20 Sec  Memory Limit: 768 MBSubmit: 508  Solved: 158[Submit][Sta ...

  9. 树形DP+DFS序+树状数组 HDOJ 5293 Tree chain problem(树链问题)

    题目链接 题意: 有n个点的一棵树.其中树上有m条已知的链,每条链有一个权值.从中选出任意个不相交的链使得链的权值和最大. 思路: 树形DP.设dp[i]表示i的子树下的最优权值和,sum[i]表示不 ...

随机推荐

  1. iOS 开发之 Xcode6 打包生成ipa给测试

    Xcode 6正式版Version 6.0.1 (6A317)已经放出Mac AppStore,之前为了体验swift也安装过beta版,但是并没有注意到6系Xcode对于导出ipa的变化,更新正式版 ...

  2. goLang文件遍历

    package main import (  "fmt"  "io/ioutil"  "os"  "path/filepath&q ...

  3. uva11429(生成随机数 期望)

    // // main.cpp // uva11429 // // Created by New_Life on 16/8/4. // Copyright © 2016年 chenhuan001. Al ...

  4. LINUX多线程(一)(创建和退出)

    1. Linux多线程概述 1.1. 概述 进程是系统中程序执行和资源分配的基本单位.每个进程有自己的数据段.代码段和堆栈段.这就造成进程在进行切换等操作时都需要有比较负责的上下文切换等动作.为了进一 ...

  5. C# Socket编程(4)初识Socket和数据流

    经过前面基础知识作为背景,现在对Socket编程进行进一步的学习.在System.Net.Socket命名空间提供了Socket类,利用该类我们可以直接编写Socket的客户端和服务的的程序.但是直接 ...

  6. ffmpeg,X264编码结果I帧QP比P帧还大

    enc_ctx->profile =FF_PROFILE_H264_MAIN ; enc_ctx->time_base.den = 24; enc_ctx->time_base.nu ...

  7. dom4j如何解析xml

    简单解析自己定义的xml文件,首先,给解析xml文件的类来个构造方法: public xmlData(File xmlFile) { file = xmlFile; try { saxReader = ...

  8. JavaScript window

    window -- window对象是BOM中所有对象的核心 window,中文"窗口" window对象除了是BOM中所有对象的父对象外,还包含一些窗口控制函数 全局的windo ...

  9. [Spring] spring-session + JedisPool 实现 session 共享

    1.至少导入四个jar包: jedis spring-session spring-data-redis commons-pool2 2.bean配置 <?xml version="1 ...

  10. NCrawler 学习

    NCrawler是一款国外的开源网络爬虫软件,遵循LGPL许可协议.其HTML处理使用的是htmlagilitypack开源库,采用xpath的方式处理定位网页元素,十分方便.同时其采用HttpWeb ...