bzoj4305: 数列的GCD】的更多相关文章

要求k个与原序列中的数不同,就是要求(n-k)个相同,令K=n-k 然后cnt[i]表示序列a中i的倍数的个数 f[i]表示gcd为i的倍数的方案数 f[i]=C(cnt[i],K)*(m/i-1)^(cnt[i]-K)*(m/i)^(n-cnt[i]) 那么ans[i]=f[i]-sigma(ans[j])  (j%i==0) cnt和组合数都可以在nlogn内预处理 所以复杂度nlogn 详见代码 #include <iostream> #include <cstdio> #i…
分析 一开始想的是对恰好\(k\)个位置容斥,结果发现对\(\gcd\)有些无从下手,想了想发现自己又sb了. 考虑对\(\gcd\)进行容斥处理,弱化条件,现在我们要求的是使\(\gcd\)是\(d\)的倍数的方案数,\(k\)个位置的限制可以用组合数算,最后莫比乌斯反演一下就好了. 时间复杂度为调和级数(\(O(n \log n)\)). 代码 #include <bits/stdc++.h> #define rin(i,a,b) for(register int i=(a);i<=…
对于d, 记{ai}中是d的倍数的数的个数为c, 那么有: 直接计算即可,复杂度O(NlogN+MlogM) --------------------------------------------------------------------------- #include<cstdio> #include<cstring> #include<algorithm>   using namespace std;   typedef long long ll;   co…
4305: 数列的GCD Description 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N).  现在问题是,对于1到M的每个整数d,有多少个不同的数列b[1], b[2], ..., b[N],满足:  (1)1<=b[i]<=M(1<=i<=N):  (2)gcd(b[1], b[2], ..., b[N])=d:  (3)恰好有K个位置i使得a[i]<>b[i](1<=i<=N)  注:gcd(x…
LINK:数列的GCD 题意: 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N). 现在问题是,对于1到M的每个整数d,有多少个不同的数列b[1], b[2], ..., b[N],满足: (1)1<=b[i]<=M(1<=i<=N): (2)gcd(b[1], b[2], ..., b[N])=d: (3)恰好有K个位置i使得\(a_i\neq b_i\)(1<=i<=N) 注:gcd(x1,x2,...,xn)为x1…
题目描述 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N).  现在问题是,对于1到M的每个整数d,有多少个不同的数列b[1], b[2], ..., b[N],满足:  (1)1<=b[i]<=M(1<=i<=N):  (2)gcd(b[1], b[2], ..., b[N])=d:  (3)恰好有K个位置i使得a[i]≠b[i](1<=i<=N)  注:gcd(x1,x2,...,xn)为x1, x2, ..., x…
#define _CRT_SECURE_NO_WARNINGS #include<cmath> #include<iostream> #include<stdio.h> #include<algorithm> #include<cstring> using namespace std; #define rep(i,t,n) for(int i =(t);i<=(n);++i) #define per(i,n,t) for(int i =(n…
题目链接 http://acm.split.hdu.edu.cn/showproblem.php?pid=5869 Problem Description This is a simple problem. The teacher gives Bob a list of problems about GCD (Greatest Common Divisor). After studying some of them, Bob thinks that GCD is so interesting.…
/* CF798 C. Mike and gcd problem http://codeforces.com/contest/798/problem/C 数论 贪心 题意:如果一个数列的gcd值大于1,则称之为美丽数列 给出数列a,可以将a_i 和 a_(i+1)换为其差和其和 如果可以变为美丽数列,输出YES并输出最少的变换次数 否则输出NO 思路: 如果变换a b a b -> a-b a+b -> -2b 2a 因此变换两个可以把a b乘以2 而若a b都是奇数,只需变换一次 所以每次先…
题意: 给出一个数列,现在有一种操作,可以任何一个a[i],用a[i] – a[i+1]和a[i]+a[i+1]替代a[i]和a[i+1]. 问现在需要最少多少次操作,使得整个数列的gcd大于1. 思路: 经过思考后发现,除非所有的数的gcd已经大于1,那么就必须把全部数字变为偶数. 变数字的时候,必须从第一个不是偶数的数字开始变化,每次都从下标最小的为奇数的数字开始变化. 如果是奇数,奇数,那么显然经过一次就可以全部变为偶数: 如果是奇数,偶数,那么必须经过两次才能全部变成偶数. 这题实际是贪…