【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 ...
随机推荐
- Numpy - 多维数组(上)
一.实验说明 numpy 包为 Python 提供了高性能的向量,矩阵以及高阶数据结构.由于它们是由 C 和 Fortran 实现的,所以在操作向量与矩阵时性能非常优越. 1. 环境登录 无需密码自动 ...
- __all__
相信很多人第一次见到这个__all__都很好奇,他有什么作用 那他到底有什么作用呢? 先上代码 from scrapy.utils.reqser import request_to_dict, req ...
- 以太坊挖矿源码:clique算法
上文我们总结了以太坊最主要的共识算法:ethash算法,本文将重点分析以太坊的另一个共识算法:clique. 关键字:clique,共识算法,puppeth,以太坊地址原理,区块校验,认证结点,POA ...
- OAuth2.0学习(1-9)新浪开放平台微博认证-web应用授权(授权码方式)
1. 引导需要授权的用户到如下地址: URL 1 https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&respons ...
- 前端开发必备之Chrome开发者工具(一)
本文介绍的 Chrome 开发者工具基于 Chrome 65版本,如果你的 Chrome 开发者工具没有下文提到的那些内容,请检查下 Chrome 的版本 简介 Chrome 开发者工具是一套内置于 ...
- Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数
本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...
- Tensorflow会话Session
转载自: http://blog.csdn.net/Hanging_Gardens/article/details/72784392 https://www.cnblogs.com/hypnus-ly ...
- Menu-菜单组件
#menu菜单组件 from tkinter import * master=Tk() def callback(): print('你好咯!!') m = Menu(master) m.add_co ...
- transform做2d和3d变形(css动画一)
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 有段时间我是没理清transform.translate.transition和animation之间的关 ...
- 谈mysql优化
公司订单系统每日订单量庞大,有很多表数据超千万.公司SQL优化这块做的很不好,可以说是没有做,所以导致查询很慢. 节选某个功能中的一句SQL EXPLAIN查看执行计划,EXPLAIN + SQL 查 ...