BZOJ4488 JSOI2015最大公约数】的更多相关文章

Description 给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列{Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R) = (R-L+1) ∗ gcd (Al..Ar). JYY 希望找出权值最大的子序列. Input 输入一行包含一个正整数 N.接下来一行,包含 N个正整数,表示序列Ai1 < =  Ai < =  10^12, 1 < =  N < =  100,000 Output 输出文件包…
显然若右端点确定,gcd最多变化log次.容易想到对每一种gcd二分找最远端点,但这样就变成log^3了.注意到右端点右移时,只会造成一些gcd区间的合并,原本gcd相同的区间不可能分裂.由于区间只有log个,暴力即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm>…
[Jsoi2015]最大公约数 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 302  Solved: 169[Submit][Status][Discuss] Description 给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列{Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R) = (R-L+1) ∗ gcd (Al..Ar). JYY 希望找出权值最大的子序列…
给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列{Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R) = (R-L+1) ∗ gcd (Al..Ar). JYY 希望找出权值最大的子序列. Input 输入一行包含一个正整数 N.接下来一行,包含 N个正整数,表示序列Ai1 < =  Ai < =  10^12, 1 < =  N < =  100,000 Output 输出文件包含一行一个正整数,表示权…
Description 给定一个长度为 N 的正整数序列Ai对于其任意一个连续的子序列 {Al,Al+1...Ar},我们定义其权值W(L,R )为其长度与序列中所有元素的最大公约数的乘积,即W(L,R) = (R-L+1) ∗ gcd (Al..Ar). JYY 希望找出权值最大的子序列. Input 输入一行包含一个正整数 N. 接下来一行,包含 N个正整数,表示序列Ai 1 < =  Ai < =  10^12, 1 < =  N < =  100,000 Output 输出…
传送门 不知谁说过一句名句,我们要学会复杂度分析 #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #define fd(i,a,b) for(int i=a;i>=b;--i) ; typedef long long ll; inline ll gi() { ll x=; char o; bool f=true; for(;!isdigit(o=getcha…
题意:给一个序列a[1],a[2],a[3]...a[n],求其中连续的子序列A[L],A[L+1],...,A[R],使其权值 W(L,R)=(R-L+1)×gcd(A[L],...,A[R])最大. 输入格式输入一行包含一个正整数n接下来一行,包含N个正整数,表示序列A_i 输出格式输出文件包含一行一个正整数,表示权值最大的子序列的权值. 输入 #1 530 60 20 20 20 输出 #1 80 说明/提示1≤Ai≤10^12,1≤N≤100000 可知一个数的质因数个数最多为logai…
洛谷题面传送门 学校模拟赛的某道题让我联想到了这道题-- 先讲一下我的野鸡做法. 首先考虑分治,对于左右端点都在 \([L,R]\) 中的区间我们将其分成三类:完全包含于 \([L,mid]\) 的区间,完全包含于 \([mid+1,R]\) 的区间,和跨过中间点的区间.前两种我们只需进一步递归 \([L,mid]\) 和 \([mid+1,R]\) 即可求解出答案,比较麻烦的是第三种.我们考虑先扫一遍预处理出 \(F_i=\gcd(a_i,a_{i+1},\cdots,a_{mid})\),以…
(这篇我就不信有网站来扣) 这个暑假打算刷刷题啥的 但是写博客好累啊  堆一起算了 隔一段更新一下.  7月27号之前刷的的就不写了 , 写的累 代码不贴了,可以找我要啊.. 2017.8.27update : 开学了终于搞到了550  可还行 *数据结构 *可持久化线段树/主席树 *bzoj3932 [CQOI2015] 任务查询系统 : 比较裸的主席树,任务查分一下就好了  cqoi真良心 *bzoj4026 dC Loves Number Theory :  数论个头啊,对每个数分解质因数…
连续区间的最大公约数 思路:参照BZOJ 4488: [Jsoi2015]最大公约数脑补出的一个\(map\)套\(vector\)的写法,写起来比线段树短,运行时间比线段树快. 代码: #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include<bits/stdc++.h> using namespace std; #define fi first #define se second #de…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
「JSOI2015」最大公约数 传送门 考虑先枚举区间左端点, 然后我们会发现所有可能的区间虽然有 \(O(n)\) 个,但是本质不同的区间 \(\gcd\) 只有 \(\log n\) 级别,而且是从左端点往右呈阶梯状递减的. 所以说我们可以对于这 \(\log n\) 种不同的 \(\gcd\) 都算一遍答案. 具体来说就是二分出最远的那个可行右端点. 然后区间 \(\gcd\) 用 \(\text{ST}\) 表维护一下即可. 参考代码: #include <algorithm> #in…
辗转相除法最大的用途就是用来求两个数的最大公约数. 用(a,b)来表示a和b的最大公约数. 有定理: 已知a,b,c为正整数,若a除以b余c,则(a,b)=(b,c). (证明过程请参考其它资料) 例:求 15750 与27216的最大公约数. 解: ∵27216=15750×1+11466 ∴(15750,27216)=(15750,11466) ∵15750=11466×1+4284 ∴(15750,11466)=(11466,4284) ∵11466=4284×2+2898 ∴(11466…
今天面试,遇到面试官询求最大公约数.小学就学过的奥数题,居然忘了!只好回答分解质因数再求解! 回来果断复习下,常用方法辗转相除法和更相减损法,小学奥数都学过,很简单,就不细说了,忘了的话可以百度:http://baike.baidu.com/link?url=Ba106RbHkMjZm3rolmCHEEFt3eDkVbngcReykcqt4Wv0dbTI_0ZmTDE5b0X-xWFx 以下是代码实现,这两种方法,还有常规的分解因式,顺便比较了一下效率,其中分解因式用了两种方法来求取小于该数字的…
除了分解质因数,还有另一种适用于求几个较小数的最大公约数.最小公倍数的方法 下面是数学证明及算法实现 令[a1,a2,..,an] 表示a1,a2,..,an的最小公倍数,(a1,a2,..,an)表示a1,a2,..,an的最大公约数,其中a1,a2,..,an为非负整数.对于两个数a,b,有[a,b]=ab/(a,b),因此两个数最小公倍数可以用其最大公约数计算.但对于多个数,并没有[a1,a2,..,an]=M/(a1,a2,..,an)成立,M为a1,a2,..,an的乘积.例如:[2,…
#include<iostream> using namespace std; //不推荐用goto,当然用它更快 //辗转相除法求两数的最大公约数 int gcd(long int a,long int b){ int x=a<b?a:b; //获得较小者,用来做循环的约束值 ;i<x;x++){ //循环 if(a>b){ int r=a%b;//取余数 ){//能否整除判断 return b;//可以便输出 }else{//否则进行下一轮的算法 a=b,b=r; } }…
这道题目的关键在于怎么求两个整数的最大公约数,这里正好复习一下以前的知识,如下: 1.设整数a和b 2.如果a和b都为0,则二者的最大公约数不存在 3.如果a或b等于0,则二者的最大公约数为非0的一个 4.如果b不为0,则使得a=a,b=a%b,转到2重复执行 实现的递归代码如下: int gcb(int a,int b) { ) return a; else return gcb(b,a%b); } 注:这个算法的证明这里简单说明下: 1.设g为a和b的公约数 2.则存在m和k使得  a=g*…
Euclid求最大公约数算法 #include <stdio.h> int gcd(int x,int y){ while(x!=y){ if(x>y) x=x-y; else y=y-x; } return x; } int main(int argc, const char *argv[]) { if(3!=argc){ printf("Usage:<a,out> num1 num2\n"); return -1; } printf("%d\…
P1372 又是毕业季I 题目背景 “叮铃铃铃”,随着高考最后一科结考铃声的敲响,三年青春时光顿时凝固于此刻.毕业的欣喜怎敌那离别的不舍,憧憬着未来仍毋忘逝去的歌.1000多个日夜的欢笑和泪水,全凝聚在毕业晚会上,相信,这一定是一生最难忘的时刻! 题目描述 为了把毕业晚会办得更好,老师想要挑出默契程度最大的k个人参与毕业晚会彩排.可是如何挑呢?老师列出全班同学的号数1,2,……,n,并且相信k个人的默契程度便是他们的最大公约数(这不是迷信哦~).这可难为了他,请你帮帮忙吧! PS:一个数的最大公…
题目:输入两个正整数number1和number2,求其最大公约数和最小公倍数. 算法:较大数和较小数取余,较小数除余数,一直到余数为0时,为最大公约数(辗转相除法):最大公倍数numbe1*number2/(最大公约数),下面直接上代码: import java.util.Scanner; public class Max_Min { static int n1; public static void main(String[] args) { Max_Min m = new Max_Min(…
代码: //最大公约数 public int gcd(int p,int q){ if(q == 0) return p; return gcd(q, p % q); } //最小公倍数 public int lcm(int p,int q){ int pq = p * q; return pq / gcd(p,q); } 测试: @Test public void go(){ int p = 5,q =17; System.out.println(p+"和"+q+"的最大公…
一个简单的小算法来获取两个数的最大公约数, public class Test { public static void main(String[] args) { long result = gcd(15, 3); System.out.println(result); } public static long gcd(long m, long n) { while (n != 0) { long rem = m % n; m = n; n = rem; } return m; } }…
求解两个整数(不能是负数)的最大公约数(要求两数不能同时为0)当两数都是0时,最大公约数为0方式一:穷举法 def GCU(m, n): if not m: return n elif not n: return m elif m is n: return m if m > n: gcd = n else: gcd = m while m%gcd or n%gcd: gcd -= 1 return gcd 方式二:相减法 def GCU(m, n): if not m: return n eli…
public static void main(String[] args){  Scanner sc = new Scanner (System.in);  int a,b;  System.out.println("请输入两个正整数:");  a = sc.nextInt();  b = sc.nextInt();  System.out.println("您输入的数是:" + a +"和"+b);  int age[] = new int[…
点击打开链接 首先给的范围很大,是10^9.暴力解肯定超时(单用for循环到10^9都大约要2s-3s),首先写了个程序暴力的把两个数所有的约数都打印出来,最后发现所有的公约数都是最大公约数的约数,并且最大公约数的约数也一定是两个数的公约数,由此题目转换为求最大公约数的约数的问题,以为输入最大是10^9,所以公约数最大是5*10^8,求这个数的所有约数只需要循环到(跟号5)*10^4,for循环可以轻松应对了,直接用for得到所有的约数,然后qsort排序后,把数组的结构抽象成数轴上的n多个点,…
package javaapplication24; class NegativeIntegerException extends Exception{ String message; public NegativeIntegerException(){ message="方法的参数值不是正整数";} public String toString(){ return message;} } class MaxCommonDivisor{ public int getMaxCommonD…
有这样一个有关最大公约数的函数:函数 f(x, y): { c=0 当 y>0: { c +=1 t = x % y x = y y = t } 返回 c * x * x} 给出三个正整数n,m,p,你需要计算: ∑i=1n∑j=1m⌊i∗jf(i,j) 对p取模的结果. #include <stdio.h> #include <iostream> #include <stack> #include <algorithm> #include <c…
#欧几里得求最大公约数 #!/usr/bin/env python #coding -*- utf:8 -*- #iteration def gcd(a,b): if b==0: return a else: return gcd(b, remainder(a, b)) #此方法仅仅书用于a和b都为正数 def gcd_1(a,b): while(b>0): rem = remainder(a,b) a = b b = rem return a def remainder(x,y): retur…
1040 最大公约数之和 题目来源: rihkddd 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  关注 给出一个n,求1-n这n个数,同n的最大公约数的和.比如:n = 6 1,2,3,4,5,6 同6的最大公约数分别为1,2,3,2,1,6,加在一起 = 15   Input 1个数N(N <= 10^9) Output 公约数之和 Input示例 6 Output示例 15 思路: 目的是求∑(i= 1,n) gcd( i , n ): gc…
题目描述 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件:  1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 输入描述 Input Description 二个正整数x0,y0 输出描述 Output Description 满足条件的所有可能的两个正整数的个数 样例输入 Sample Input 3 60 样例…