乞讨X-Y之间p素数,,典型的纳入和排除问题,列的求和运算总和的数,注意,第一项是最后一个项目数。

如果不改变到第一记录的答案,脱机处理,能保存查询,候,遇到一个操作1,就遍历前面的操作。把改动加上去,注意要判重。仅仅保留最后一次改动。

#include <stdio.h>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iostream>
#include<cstring>
using namespace std;
typedef long long ll;
ll ans;
int pri[1234];
int top;
int n,m,a,b,c;
ll gcd(ll a,ll b)
{
return a%b==0? b:gcd(b,a%b);
}
ll cal(ll num)
{
int x=a;
int y=b;
int fir;
int tmp=y/num-x/num;
if(x%num==0) fir=x,tmp++;
else fir=num*(x/num+1);
if(fir>y) return 0;
int en=fir+(tmp-1)*num;
return (fir+en)*1ll*tmp/2;
}
void dfs(int p,ll num,int flag)
{
if(num>b) return;
if(p) {ans+=flag*cal(num);}
for(int i=p+1;i<top;i++)
{
dfs(i,pri[i]*num,-flag);
}
}
ll out[1234];
int d[1234][4];
int rec[1234][2];
bool vis[400005];
bool V[400005];
int prime[400005];
int topp=0;
void sieve(int n)
{
int m= (int)sqrt(n+0.5);
for(int i=2;i<=m;i++)
{
if(!V[i])
{
for(int j=i*i;j<=n;j+=i)
V[j]=1;
}
}
V[1]=1;
for(int i=2;i<=400000;i++)
{
if(V[i]==0) prime[topp++]=i;
}
}
int main()
{
sieve(400005);
int cas;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&m);
int op;
for(int i=1;i<=m;i++)
{
scanf("%d",&op);
d[i][0]=op;
if(op==1)
{
ans=0;
top=1;
scanf("%d%d%d",&a,&b,&c);
d[i][1]=a;
d[i][2]=b;
d[i][3]=c;
if(c==1)
{
out[i]=(a+b)*1ll*(b-a+1)/2;
continue;
}
for(int j=0;prime[j]*prime[j]<=c;j++)
{
if(V[c]==0) break;
if(c%prime[j]==0)
{
pri[top++]=prime[j];
while(c%prime[j]==0) c/=prime[j];
}
}
if(c>1) pri[top++]=c;
dfs(0,1,-1);
out[i]=(a+b)*1ll*(b-a+1)/2-ans;
}
else
{
scanf("%d%d",&b,&c);
d[i][1]=b;
d[i][2]=c;
}
}
for(int i=1;i<=m;i++)
{
if(d[i][0]==1)
{
ll ans=out[i];
int cnt=0;
for(int j=i-1;j>=1;j--)
{
if(d[j][0]==2&&!vis[d[j][1]])
{
vis[d[j][1]]=true;
rec[cnt][0]=d[j][1];
rec[cnt][1]=d[j][2];
cnt++;
}
}
for(int j=0;j<cnt;j++)
{
vis[rec[j][0]]=false;
if(rec[j][0]>=d[i][1]&&rec[j][0]<=d[i][2])
{
ans-=( gcd(rec[j][0],d[i][3])==1?rec[j][0]:0 );
ans+=( gcd(rec[j][1],d[i][3])==1?rec[j][1]:0 );
}
}
printf("%I64d\n",ans);
}
}
}
return 0;
}
/*
123
100 1
1 1 10 11
2 2 3
2 2 5
1 1 10 2
*/

版权声明:本文博主原创文章,博客,未经同意不得转载。

hdu 4407 Sum 容斥+当前离线的更多相关文章

  1. HDU - 4407 Sum (容斥)

    题意:初始序列[1..N](1<=N<=4e5),支持两种操作:1.求区间[x,y]内与p互素的数之和: 2.将x位置的数变为c. 分析:很容易把人骗到线段树的思维中,而实际上操作2单点的 ...

  2. hdu 5514 Frogs(容斥)

    Frogs Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  3. HDU 5213 分块 容斥

    给出n个数,给出m个询问,询问 区间[l,r] [u,v],在两个区间内分别取一个数,两个的和为k的对数数量. $k<=2*N$,$n <= 30000$ 发现可以容斥简化一个询问.一个询 ...

  4. HDU 2588 思维 容斥

    求满足$1<=X<=N ,(X,N)>=M$的个数,其中$N, M (2<=N<=1000000000, 1<=M<=N)$. 首先,假定$(x, n)=m$ ...

  5. HDU 5514 Frogs 容斥定理

    Frogs Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5514 De ...

  6. HDU 1695 GCD 容斥

    GCD 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1695 Description Given 5 integers: a, b, c, d, k ...

  7. hdu 1695 GCD 容斥+欧拉函数

    题目链接 求 $ x\in[1, a] , y \in [1, b] $ 内 \(gcd(x, y) = k\)的(x, y)的对数. 问题等价于$ x\in[1, a/k] , y \in [1, ...

  8. HDU - 4135 Co-prime 容斥定理

    题意:给定区间和n,求区间中与n互素的数的个数, . 思路:利用容斥定理求得先求得区间与n互素的数的个数,设表示区间中与n互素的数的个数, 那么区间中与n互素的数的个数等于.详细分析见求指定区间内与n ...

  9. HDU 4135 Co-prime (容斥+分解质因子)

    <题目链接> 题目大意: 给定区间[A,B](1 <= A <= B <= 10 15)和N(1 <=N <= 10 9),求出该区间中与N互质的数的个数. ...

随机推荐

  1. mysql重装后出现乱码解决办法

    查看当前连接系统参数:SHOW VARIABLES LIKE '%char%'; mysql> show variables like 'char%'; +------------------- ...

  2. poj2752 Seek the Name, Seek the Fame(next数组的运用)

    题目链接:id=2752" style="color:rgb(202,0,0); text-decoration:none; font-family:Arial; font-siz ...

  3. 使用JAVASCRIPT实现静态物体、静态方法和静态属性

    Javascript语言的面向对象特征非常弱.其它面向对象语言在创建类时仅仅要使用keywordstatic就可以指定类为静态类,Javascript没有提供static这种keyword.要让Jav ...

  4. hdu1372 dfs搜索之国际象棋的马

    原题地址 题意 一个8x8的国际象棋棋盘,你有一个棋子"马".算出棋子"马"从某一格到还有一格子的最少步数. 与普通dfs不同的是,你能走的路线不是上下左右,四 ...

  5. simpleDateFormat日期格式转换

    1------------------------------------------------------------------------------------- package com.n ...

  6. MVC与三层架构

    我们平时总是将三层架构与MVC混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. ...

  7. CenOS下安装jdk

    1. 安装JDK1.7.0 下载完成后在取得root权限后执行: [root@sea sea]# sudo rpm -ivh /目录/jdk-7-linux-x64.rpm 执行结果: Prepari ...

  8. 使用 WPF 实现所见即所得HTML编辑器

    Introduction In this tip, you will learn the use of WPF webbrowser control and the use of the librar ...

  9. Xamarin.Android 在VS下调试时提示 In mgmain JNI_OnLoad 程序“Mono”已退出 解决办法

    原因是使用了破解版的 Xamarin,调试时不能使用共享库

  10. OTN&互换amp; P-OTN有效降低100G 网络成本 (两)

    OTN互换& P-OTN有效降低100G 网络成本 (两) 在全球范围内.网流量的增长速度是空前的,导致此现象的缘由包含云服务的增长.移动宽带和基于互联网的视频点播服务的增长. Cisco估计 ...