【Gcd】
【题目描述】
有 n 个正整数 x1~xn,初始时状态均为未选。有 m 个操作,每个操作给定一个编号 i,将 xi 的选取状态取反。每次操作后,你需要求出选取的数中有多少个互质的无序数对。
【输入数据】
第一行两个整数 n,m。第二行 n 个整数 x1~xn。接下来 m 行每行一个整数。
【输出数据】
m 行,每行一个整数表示答案。
【样例输入】
4 5 1 2 3 4 1 2 3 4 1
【样例输出】
0 1 3 5 2
【数据范围】
对于 20%的数据,n,m<=1000。对于另外 30%的数据,xi<=100。对于 100%的数据,n,m<=200000,xi<=500000,1<=i<=n。
分析:
对带有询问修改的问题我们可以先想出无询问无修改的问题解决方法,然后将解法组织成易于修改和回答询问的形式。
那么对于这道题,无修改无询问则是:给出n个数,求出n个数中互质的无序数对个数。
让我们考虑互质的本质——没有大于1的公因子,即GCD(a,b)==1。这样的数学题我们清楚地知道一一枚举是没有好结果的,通常情况下这类问题可以朝两大方向思考:组合数与容斥原理。
由于本题不存在方案数、概率等的计算,因此我们尝尝容斥原理的味道。
既然企图使用容斥,那么定几个表示有关联数组是很有必要的:
·f(i)表示GCD为i的 #include<stdio.h>
#define ll long long
#define go(i,a,b) for(int i=a;i<=b;i++)
;
int n,m,a[N],I,x,d,Mob[N];
ll s[N],g[N],f[N],ans;bool get[N];
struct Sieve
{
int prime[N],t;bool no[N];
void Mobius_Sieve()
{
Mob[]=;
go(i,,){;
go(j,,t){)break;
Mob[i*prime[j]]=i%prime[j]?-Mob[i]:;
no[i*prime[j]]=;)break;}}
}
}Tool;
int main()
{
Tool.Mobius_Sieve();
scanf("%d%d",&n,&m);
go(i,,n)scanf("%d",a+i);
while(m--)
{
scanf("%d",&I);x=a[I];
d=()?:-;
go(i,,x)&&i*i<=x)
{
s[i]+=d;if(i!=x/i)
s[x/i]+=d;
ans-=Mob[i]*g[i];if(i!=x/i)
ans-=Mob[x/i]*g[x/i];
g[i]=s[i]*(s[i]-)/;if(i!=x/i)
g[x/i]=s[x/i]*(s[x/i]-)/;
ans+=Mob[i]*g[i];if(i!=x/i)
ans+=Mob[x/i]*g[x/i];
}
else if(i*i>x)break;
printf("%lld\n",ans);
}
;
}//Paul_Guderian
我常常在河边呆呆的幻想,
做着一个孩子的白日梦,
想象未来有许多颜色。————汪峰《我在长大》
【Gcd】的更多相关文章
- 【gcd】 最大公约数
int gcd(int a,int b) { int r; ) { r=a%b; a=b; b=r; } return a; }
- upc组队赛1 不存在的泳池【GCD】
不存在的泳池 题目描述 小w是云南中医学院的同学,有一天他看到了学校的百度百科介绍: 截止到2014年5月,云南中医学院图书馆纸本藏书74.8457万册,纸质期刊388种,馆藏线装古籍图书1.8万册, ...
- 【GCD】AtCoder Grand Contest 018 A - Getting Difference
从大到小排序,相邻两项作差,求gcd,如果K是gcd的倍数并且K<=max{a(i)},必然有解,否则无解. 可以自己手画画证明. #include<cstdio> #include ...
- 【gcd】辗转相除法
#include<stdio.h> int gcd(int a, int b) { int c; while(b) { c = a % b; a = b; b = c; } return ...
- 辗转相除法求最大公约数和最小公倍数【gcd】
要求最小公倍数可先求出最大公约数 设要求两个数a,b的最大公约数 伪代码: int yushu,a,b: while(b不等于0) { yushu=a对b求余 b的值赋给a yushu的值赋给b } ...
- 【数学】XMU 1597 GCD
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1597 题目大意: 求(am-bm, an-bn),结果取模1000000007,a,b ...
- 【BZOJ2820】YY的GCD(莫比乌斯反演)
[BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{ ...
- 【UVa11426】GCD - Extreme (II)(莫比乌斯反演)
[UVa11426]GCD - Extreme (II)(莫比乌斯反演) 题面 Vjudge 题解 这.. 直接套路的莫比乌斯反演 我连式子都不想写了 默认推到这里把.. 然后把\(ans\)写一下 ...
- 【BZOJ2818】Gcd(莫比乌斯反演)
[BZOJ2818]Gcd(莫比乌斯反演) 题面 Description 给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的 数对(x,y)有多少对. Input 一个整数N Ou ...
随机推荐
- 关于 Ubuntu Linux 16.04中文版的 root 权限及桌面登录问题
新接触 Ubuntu 的朋友大多会因为安装中没有提示设置 root 密码而不太清楚是什么原因. 起初 Ubuntu 团队希望安装尽可能的简单. 不使用 root , 在安装期间的两个用户交互步骤可以省 ...
- php的数组的函数
1.可以将一个二位数组转化成两个一维数组,没有指定键就是默认的索引 注意二位数组有几种类型,其中最常见的一种是外层循环是一个索引数组,然后内层是一个关联数组.这种通过便利第一层,然后第二层指定关联词就 ...
- 深度学习之 cnn 进行 CIFAR10 分类
深度学习之 cnn 进行 CIFAR10 分类 import torchvision as tv import torchvision.transforms as transforms from to ...
- SpringBoot应用的前台目录
一.两个重要目录 templates:存放web页面的模板文件,需要在controller返回视图名称,框架转发才能找到的html. static :存放静态资源,如:html(放在这里可直接访问,如 ...
- Spring Security 入门(1-3-3)Spring Security - logout 退出登录
要实现退出登录的功能我们需要在 http 元素下定义 logout 元素,这样 Spring Security 将自动为我们添加用于处理退出登录的过滤器 LogoutFilter 到 FilterCh ...
- Spring Security 入门(1-2)Spring Security - 从 配置例子例子 开始我们的学习历程
1.Spring Security 的配置文件 我们需要为 Spring Security 专门建立一个 Spring 的配置文件,该文件就专门用来作为 Spring Security 的配置. &l ...
- MongoDB GridFS 存储大文件
我们经常会遇到这样的场景:上传/下载文件. 有两种思路可以解决这个问题: (1)将文件存储在服务器的文件系统中: (2)将文件存储在数据库中. 如果我们选择(2),那么我们可以使用MongoDB Gr ...
- java专业术语
java的(PO,VO,TO,BO,DAO,POJO)解释 PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了.通常对应数据模型 ...
- RxJava系列5(组合操作符)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- CentOS7为firewalld添加开放端口
运行.停止.禁用firewalld 启动:# systemctl start firewalld 查看状态:# systemctl status firewalld 或者 firewall-cmd ...