最大公约数

A.签到题 (公约数||公倍数) (Comet OJ - Contest #7)

笑着哭i 提交于 2019-11-29 19:48:29
题目描述 多次询问,每次询问给一个值域范围 [l,r] [ l , r ],要回答下列四个问题: 从这个范围内选出两个整数(两个数可相同), (1) 这两个数的最小公倍数最大是多少? (2) 这两个数的最小公倍数最小是多少? (3) 这两个数的最大公约数最大是多少? (4) 这两个数的最大公约数最小是多少? 输入描述 第一行一个数 t t 表示数据组数 ( t = 10^4 t = 1 0 4)。 之后 t t 行,每行两个数 l, r l , r 表示一次询问( 1 \le l \le r \le 10^9 1 ≤ l ≤ r ≤ 1 0 9)。 输出描述 对于每个询问,输出一行四个数依次表示这四个问题的答案。(四个数间恰以一个空白字符隔开,每行行末不能有多余的空白字符。) 样例输入 1 2 2 3 1 2 样例输出 1 6 2 3 1 2 1 2 1 提示 对于值域范围 [2,3] [ 2 , 3 ]: lcm( 2 , 3 ) = 6 l c m ( 2 , 3 ) = 6 是最大的最小公倍数 lcm( 2 , 2 ) = 2 l c m ( 2 , 2 ) = 2 是最小的最小公倍数 gcd( 3 , 3 ) = 3 g c d ( 3 , 3 ) = 3 是最大的最大公约数 gcd( 2 , 3 ) = 1 g c d ( 2 , 3 ) = 1 是最小的最大公约数

最大公约数 最小公倍数

杀马特。学长 韩版系。学妹 提交于 2019-11-29 19:30:51
最大公约数(辗转相除法),最小公倍数: 例如:输入a,b求其: 最大公约数:即将大的数a除以小的数b,得到的余数c,a=b b=c,如此反复直到余数为0,此时的b则为最大公约数。 最小公倍数:初始值a * 初始值b/最大公约数。 来源: https://blog.csdn.net/qq_43129582/article/details/100899431

一道最大公约数的题:easy number

我怕爱的太早我们不能终老 提交于 2019-11-29 16:41:44
现有n个Zack,每个Zack有一个一个能力值,从这n个Zack中选出k个,使他们的最大公约数的值最大 【输入格式】 第一行有一个整数n,代表有n个Zack 第二行n个整数ai,代表每个Zack的能力值 【输出格式】 一共n行,第n行为k=i情况下的能力值的最大公因数 【样例输入】 4 1 2 3 4 【样例输出】 4 2 1 1 所有有关约数的题我们可以通过它们的共同因子来进行运算; 这道题我们可以统计对于每个因子x,有多少个数拥有因子x; 这样我们循环模拟来对答案回答; #include <bits/stdc++.h> #pragma GCC optimize(2) using namespace std; int c[1000010]; inline void fenjie(register int x) { for(int i=1;i<=sqrt(x);i++){ if(x%i==0){ c[i]++; if(i!=x/i) c[x/i]++; } } } int read() { char c=getchar();int tmp=0; while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') tmp=tmp*10+c-'0',c=getchar(); return tmp; } int main() { register

Python学习笔记No1

折月煮酒 提交于 2019-11-29 16:34:20
学习 [这里] 处的内容而做的相关笔记。 本篇包括: 语言设计基础 面向对象编程 图形用户界面和游戏开发 一、语言设计基础 1、注释 单行注释 - 以#和空格开头的部分 多行注释 - 三个引号开头,三个引号结尾 2、运算符 示例1 a = 5 print("a = ", a) flag1 = 3 > 2 print("flag1 = ", flag1) 示例2 #!/usr/bin/python # -*- coding: latin-1 -*- import os, sys f = float(input('请输入华氏温度:')) c = (f - 32) / 1.8 print('%.1f华氏度 = %.1f摄氏度' % (f, c)) 示例3 #!/usr/bin/python # -*- coding: latin-1 -*- import os, sys, math radius = float(input('Please input redius of the cicle: ')) perimeter = 2 * math.pi * radius area = math.pi * radius * radius print('Perimeter = %.2f' % perimeter) print('Area = %.2f' % area) 示例4 # 输入年份

python3求两个数的最大公约数

大兔子大兔子 提交于 2019-11-29 14:55:01
啥叫公约数呢?   公约数:它是一个能被若干个整数同时均整除的整数。如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”;公约数中最大的称为最大公约数   举个栗子:12和18的公约数有 1、2、3、6 因为12和18能同时被这几个数整除。其中6是最大的公约数 程序实现思路: 1 两个数的最大公约数肯定不会大于两个数中较小的数 2 如果较大的数能整除较小的数,那较小的数就是最大公约数 3 即: 将两整数求余 a%b = x 4 如果x = 0;则b为最大公约数 5 找出能同时被两个数整除的正整数 6 打印所有同时被整除的最大的一个数,这个数就是最大公约数 代码实现方法: Number1 = int(input("请输入第一个正整数:")) Number2 = int(input("请输入第二个正整数:")) if Number1>Number2: ten = Number1 Number1 = Number2 Number2 = ten for i in range(1,Number1): if Number2 % Number1 == 0: c = Number1 elif (Number1 % i ==0) and (Number2 % i == 0): c = i print("数字%s和%s的最大公约数是:%s" %(Number1,Number2,c))

莫比乌斯反演与狄利克雷卷积

天大地大妈咪最大 提交于 2019-11-29 14:36:50
积性函数 对 于 g c d ( a , b ) = 1 , 都 有 f ( a b ) = f ( a ) ∗ f ( b ) 。 那 么 f ( n ) 是 积 性 函 数 对于gcd(a,b)=1, 都有 f(ab)=f(a)*f(b)。那么f(n)是积性函数 对 于 g c d ( a , b ) = 1 , 都 有 f ( a b ) = f ( a ) ∗ f ( b ) 。 那 么 f ( n ) 是 积 性 函 数 欧拉函数 ϕ ( n ) \phi(n) ϕ ( n ) 是一个积性函数,对于一个素数 p p p 。有: ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ ( p ) = p − 1 , ϕ ( p k ) = p k − p k − 1 = ( p − 1 ) p k − 1 \phi(p^k)=p^k-p^{k-1}=(p-1)p^{k-1} ϕ ( p k ) = p k − p k − 1 = ( p − 1 ) p k − 1 第一个就根据定义理解,第二个就稍微容斥一下就可以了。 莫比乌斯函数 μ \mu μ 莫比乌斯函数完整定义的通俗表达: 1)莫比乌斯函数 μ ( n ) μ(n) μ ( n ) 的定义域是 N N N 2) μ ( 1 ) = 1 μ(1)=1 μ ( 1 ) = 1 3)当 n n n 存在平方因子时, μ

最大公约数和最小公倍数(详细)

限于喜欢 提交于 2019-11-29 07:45:41
在写“更相减损法”的完整框架时,有一个细节问题要注意:自定义函数返回的结果,要在主函数中将其结果赋值给一个变量,以便后续代码所用,否则即便调用了该函数,也得不到该函数执行的结果。因为返回的结果是局部变量,不能跨函数使用。要在用完自定义函数的那一刻,及时地将结果赋值给一个变量 前言: 约数和倍数:存在于有整除关系的两个整数之间。即若a能整除b,也即a%b=0(余数),则a为b的倍数,b为a的约数(大的为倍数,小的为约数。倍数大于等于约数)。如:12÷3=4…0,则12为3的倍数,3为12的约数 公约数:几个整数的公共约数 最大公约数 :Greatest Common Divisor (GCD) 指两个或多个整数共有约数中最大的一个。a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号。求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法。与最大公约数相对应的概念是最小公倍数,a,b的最小公倍数记为[a,b] 实例1:12和16 ∵ 12的约数有1、2、3、4、6、12,而16的约数为1、2、4、8、16。(一个整数的约数是有限的) ∴公约数:1、2、4 ∴最大公约数:4 记为(12,16)=4或记为(16,12)=4 最小公倍数 :Least Common Multiple (LCM

计算最大公约数

心已入冬 提交于 2019-11-29 07:31:42
Greatest Common Divisor(GCD) 1、辗转相除法: 欧几里得算法 据说是最早的算法,用于计算最大公约数,也是数论的基础算法之一。又被称之为辗转相除法。 具体做法: 1.用较小数除较大数, 2.再用出现的余数(第一余数)(变成这一轮的除数)去除除数(变成这一轮的被除数) 3.再用出现的余数(第二余数)(变成这一轮的除数)去除第一余数(变成这一轮的被除数) 4.如此反复 5.直到最后余数是0为止。 //迭代法(递推法):欧几里得算法:计算分子分母的最大公约数 public long getGcd(long a, long b) { while (a % b != 0) { long temp = a % b; a = b; b = temp; } return b; } //或许你会看到这个版本的代码,效果相同 public long getGcd(long a, long b) { while ( b > 0) { long temp = a % b; a = b; b = temp; } return a; } 2、更相减损术: https://www.cnblogs.com/laizhenghong2012/p/8457784.html 更相减损术出自《九章算术》,其原理很简单:两个正整数a和b(a > b),它们的最大公约数等于a

浅谈最大公约数及最小公倍数

微笑、不失礼 提交于 2019-11-29 04:49:34
最大公约数及最小公倍数 本篇随笔讲解信息学奥林匹克竞赛中的数学部分知识点——最大公约数及最小公倍数。最大公约数及最小公倍数是信竞中非常常考的数学知识点,无论是一些数学公式的推导,还是互质、欧拉函数等相关类型题,都需要最大公约数和最小公倍数的参与。本篇随笔要求读者有不低于高中一年级的数学基础及一定的思维推理能力,一些数学符号及基本概念将不再赘述。 GCD&LCM 任意两正整数 \(a,b\) 的最大公约数被记作: \(gcd(a,b)\) ,最小公倍数被记作: \(lcm(a,b)\) 。 定理1 对于任意的两个正整数,有以下定理 \[ \forall a,b\in N \] \[ gcd(a,b)\times lcm(a,b)=a\times b \] 证明过程如下: 设 \(x=gcd(a,b)\) , 那么有 \(a_0=a/x,b_0=b/x\) 所以, \(gcd(a_0,b_0)=1,lcm(a_0,b_0)=a_0\times b_0\) 。 注:这里的跳转很简单,因为如果两个数被“抽走”了它们的最大公约数,那么剩下的那部分数字一定是互质的,那么这两个剩下的数的 \(gcd\) 就一定得1, \(lcm\) 一定得两个数的乘积。 所以有 \(lcm(a,b)=lcm(a_0\times x,b_0\times x)=x\times lcm(a_0,b_0)=a_0

算法设计与分析——习题一

南楼画角 提交于 2019-11-29 04:07:48
习题 1 1.1. 用于计算 gcd(m,n) 的欧几里得算法 1.1.1. 算法描述 辗转相除法,又名欧几里得算法( Euclidean algorithm ),是求最大公约数 (greater common divisor) 的一种,通常做法是:用较小的数去除较大的数,用第二余数再去除第一余数,最终我们可以得到最终的余数为 0 以及最大公约数。 1.1.2. 伪代码 Euclid(m,n) //使用Euclid计算gcd(m,n) //输入:两个不全为0的非负整数m,n //输出:m,n的最大公约数 while n≠0 do r ← m mod n m← n n ← r return m 1.1.3. 算法实现 int Euclid(int m,int n){ int r; while(n!=0){ r=m%n; m=n; n=r; } return m; } 1.2. 用于计算 gcd(m,n) 的连续检测算法 1.2.1. 算法描述 连续监测算法,是求最大公约数的一种,通常做法是:从 1 到自己本身进行遍历,如果说能够被整除,那么将这个数进行返回。 1.2.2. 伪代码 ContinuesMonitor(m,n) //使用ContinuesMonitor计算gcd(m,n) //输入:两个不全为0的非负整数m,n //输出:m,n的最大公约数 for i 1 to n by