Codeforces 902D/901B - GCD of Polynomials】的更多相关文章

传送门:http://codeforces.com/contest/902/problem/D 本题是一个数学问题——多项式整除. 对于两个整数a.b,求最大公约数gcd(a,b)的辗转相除法的函数如下: int gcd(int a, int b) { ) return a; return gcd(b, a % b); } 一次辗转相除法将数对(a,b)转化成(b,a mod b),直至b=0. 对于多项式A(x),定义deg A(x)为多项式的次数.对于多项式A.B,定义多项式mod运算:若A…
D - GCD of Polynomials 逆推,根据(i-2)次多项f(i-2)式和(i-1)次多项式f(i-1)推出i次多项式f(i) f(i)=f(i-1)*x+f(i-2) 样例已经给出0次和1次的了 注意系数绝对值大于1对2取模 代码: #include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define mem(a,b) memset(a,b,sizeof(a)…
[题目]B. GCD of Polynomials [题意]给定n,要求两个最高次项不超过n的多项式(第一个>第二个),使得到它们GCD的辗转次数为n.n<=150. [算法]构造 [题解]辗转n次是最坏情况——每次辗转至少会使被模数的最高次项变到模数的最高次项-1,也就是必须构造两个多项式满足这种最坏情况. eg.n=5,(5,4),(4,3),(3,2),(2,1),(1,0),(0,0). 为了构造最坏情况,考虑模仿斐波那契数列进行构造: p(0)=1,p(1)=x,p(n)=x*p(n…
Maximal GCD 题目链接:http://codeforces.com/contest/803/problem/C 题目大意: 给你n,k(1<=n,k<=1e10). 要你输出k个数,满足一下条件: ①这k个数之和等于n ②每个满足①条件的数列有最大公约数q,输出q最大的数列. 思路: 我们只需要找出这个最大的q是什么.q满足: ①q是n的 公约数 ②n/q>=(1+2+3+···+k) ③q是满足①②中的最大的 只需要通过for(long long i=1;i<sqrt(…
C. Maximal GCD time limit per test: 1 second memory limit per test: 256 megabytes input: standard input output: standard output You are given positive integer number n. You should create such strictly increasing sequence of k positive numbers a1, a2,…
http://codeforces.com/problemset/problem/338/D 题意: 有一张n*m的表格,其中第i行第j列的数为gcd(i,j) 给出k个数 问在这张表格中是否 有某一行中连续的某一部分 就是 这k个数 题意转化: 是否存在 一对i,j 满足gcd(i,j)=a1,gcd(i,j+1)=a2,…… gcd(i,j+k-1)=ak 直观上感觉: i要满足的必要条件是 i |  lcm(a1,a2……ak) j要满足的必要条件是 j= a1*k1,j+1=a2*k2……
原题链接:http://codeforces.com/problemset/problem/583/C 题意: 大概就是给你个gcd表,让你还原整个序列. 题解: 由$GCD(a,a)=a$,我们知道最大的那个数一定是原序列中的数,然后每次从集合中选取最大的数出来,和已经构造好的序列进行gcd,删除gcd出来的值即可. 代码: #include<iostream> #include<cstring> #include<map> #include<cstdio>…
[题目链接] https://codeforces.com/contest/1047/problem/C [算法] 首先求出n个数的最大公约数g , 将每个数除以g , 那么 , 问题就转化为在n个数中选出一个数集 , 使得这个数集中的数最大公约数不为1 , 最大化数集大小 预处理Ai范围内的质数 , 然后对于每个数分解质因数即可 时间复杂度 : O(NlogN + N log V) [代码] #include<bits/stdc++.h> using namespace std; ; ; i…
题目链接:http://codeforces.com/contest/803/problem/C 中了若干trick之后才过... k个数的严格递增序列最小权值和就是${n*(n+1)/2}$,枚举这些数字增加的倍数x,使得序列变成${x,2x,3x...kx}$,然后再使最后一个数字变大满足要求就可以了,枚举的复杂度是根号$n$的. 要注意枚举倍数$x$的时候还要顺便枚举了$n/x$,然后${n*(n+1)/2}$这个东西是会爆long long的. #include<iostream> #…
You are given a tree consisting of n vertices. A number is written on each vertex; the number on vertex i is equal to ai . Let's denote the function g(x,y) as the greatest common divisor of the numbers written on the vertices belonging to the simple…