最大公约数

最大公约数和最小公倍数问题

谁说我不能喝 提交于 2020-01-21 02:38:39
问题 : 最大公约数和最小公倍数问题 时间限制: 1 Sec 内存限制: 128 MB 题目描述 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数 条件: 1.P,Q是正整数 2.要求P,Q以x0为最大公约数,以y0为最小公倍数. 试求:满足条件的所有可能的两个正整数的个数. 输入 二个正整数x0,y0 输出 一个数,表示求出满足条件的P,Q的个数 样例输入 Copy 3 60 样例输出 Copy 4 提示 P,Q有4种 3 60 15 12 12 15 60 3 #include <iostream> using namespace std; int fun(int a,int b){ if(b==0) return a; return fun(b,a%b); } int main() { int x,y,index=0; cin>>x>>y; for(int i=x;i<=y;i++){ if((x*y%i==0)&&(fun(i,x*y/i)==x)) { index++; } } cout <<index<< endl; return 0; } 来源: CSDN 作者: Stone 不会喝水 链接: https://blog.csdn.net/qq_16497423/article/details

最大公约数问题

牧云@^-^@ 提交于 2020-01-20 16:48:25
最大公约数问题 题目描述 如何求两个正整数的最大公约数? 思路 暴力枚举法 没什么好说的,直接看代码 //暴力枚举法 public static int gcd1 ( int a , int b ) { int big = a > b ? a : b ; int small = a < b ? a : b ; if ( big % small == 0 ) { return small ; } for ( int i = small / 2 ; i > 0 ; i -- ) { if ( small % i == 0 && big % i == 0 ) { return i ; } } return 1 ; } 辗转相除法 基于定理:两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数 基于这条定理,我们利用递归法就可以解决问题 //辗转相除法 public static int gcd2 ( int a , int b ) { int big = a > b ? a : b ; int small = a < b ? a : b ; if ( big % small == 0 ) { return small ; } return gcd2 ( big % small , small ) ; } 更相减损术 原理:两个正整数a和b(a>b)

最大公约数与最小公倍数算法整理

一笑奈何 提交于 2020-01-18 05:41:42
最大公约数: 能够同时被两个数整除的那个最大的数 。 最小公倍数: 两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数。 最小公倍数=两整数的乘积÷最大公约数 反之同理。 最大公约数算法: 1.GCD算法(欧几里得算法): 定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。 gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0) 1 int gcd(int a,int b) 2 { 3 int r; 4 while(b>0) 5 { 6 r=a%b; 7 a=b; 8 b=r; 9 } 10 return a; 11 } 以上是GCD算法的基础模运算实现,即辗转相除法。 位运算计算: 1 int gcd(int a,int b) 2 { 3 while(b^=a^=b^=a%=b); 4 return a; 5 } 递归方式实现: 1 int gcd(int a,int b) 2 { 3 return (b>0)?gcd(b,a%b):a; 4 } 2.相减法: 有两整数a和b: ① 若a>b,则a=a-b ② 若a<b,则b=b-a ③ 若a=b,则a(或b)即为两数的最大公约数 ④ 若a≠b,则再回去执行①

求两个整数的 GCD/LCM

坚强是说给别人听的谎言 提交于 2020-01-18 05:40:40
最大公约数[Greatest Common Divisor(GCD)]:指两个或多个整数共有约数中最大的一个,通常记为 (a, b) 最小公倍数[Least Common Multiple(LCM)]:两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数 [a, b] 求最大公约数常见方法有:质因数分解法、短除法、辗转相除法、更相减损法、stain算法 求最小公倍数,可由最大公约数得到,gcd(a, b) * lcm(a, b) = ab 在坐标里,将点(0, 0)和(a, b)连起来,通过整数坐标的点的数目(除了(0, 0)一点之外)就是gcd(a, b) 重要性质:gcd(a,b)=gcd(b,a) (交换律) gcd(-a,b)=gcd(a,b) gcd(a,a)=|a| gcd(a,0)=|a| gcd(a,1)=1 gcd(a,b)=gcd(b, a mod b) gcd(a,b)=gcd(b, a-b) 待续…… 来源: https://www.cnblogs.com/excavator/p/4544906.html

【笔记】很基础的数论知识

两盒软妹~` 提交于 2020-01-17 22:40:41
2020.1.17 qbxt笔记 最大公约数、最小公倍数 定义 如果d是能同时整除a, b中最大的正整数,我们称d为a和b的最大公约数,记作d = gcd(a, b) 如果一个数d,既是a的倍数,又是b的倍数,同时d是满足这两个条件中的最小正整数,那么称d是a和b的最小公倍数,记作d = lcm(a, b) 辗转相除法 •假设a > b,我们有gcd(a, b) = gcd(b, a % b) 利用这样的方法,可以把求最大公约数的问题转化为两个更小的数的最大公约数,从而完成求解 时间复杂度为log 求得$ gcd(a,b)$之后我们就很容易求出a与b的最小公倍数 $ gcd(a,b) * lcm(a, b) = a * b $ int gcd(int a,int b){ return b==0?a:gcd(b,a%b); } 唯一分解定理 任意一个正整数x,都可以唯一地分解成p1^a1 * p2^a2 * … * pn^an的形式,其中p1到pn是素数(不考虑素数之间的顺序) 时间复杂度为O(log x) 例题 1.NOIP2001 最大公约数和最小公倍数问题 传送 输入两个正整数x, y,问有多少对正整数以x为最大公约数,以y为最小公倍数 x <= 10^5, y <= 10^6 上面我们刚刚提到,$ gcd(a,b) * lcm(a, b) = a * b $

通过例子学习C++(三)最大公约数,并知其然

血红的双手。 提交于 2020-01-13 07:54:43
本文是通过例子学习C++的第三篇,通过这个例子可以快速入门c++相关的语法。 题目要求:输入两个整数,求其大公约数。 解答方法一:两个数的最大公约数,是这两个数中的小数,或者是这2个数的公约数中的最大数字。 这两个数字用num1和num2存储,min表示其中最小数字。如果num1和num2能同时整除min,则min为起最大公约数,否则min=min-1,重复该循环直到num1和num2能同时整除min。似曾相识?是的,和上一篇求最小公倍数方法差不多。 通过例子学习C++(二)最小公倍数 #include <iostream> using namespace std; int main() { int num1,num2,min; cin>>num1>>num2; //求num1和num2中的最小数字 if(num1<num2){ min = num1; }else{ min = num2; } while(num1 %min !=0 || num2 %min !=0){ min--; } cout<<"数字"<<num1<<"和数字"<<num2<<"的最大公约数为:"<<min; return 0; } 通过该例子,可以学习: if-else语句 为了养成良好的习惯,我在if和else语句的语句体中,都增加了大括号。这样养成习惯后,不会忘记括号而导致的错误。 while循环 同上

I'm bored with life (思维)

你离开我真会死。 提交于 2020-01-11 08:54:15
题目链接: http://codeforces.com/problemset/problem/822/A 思路: 刚开始傻乎乎的真的去算阶乘,然后再求它们的最大公约数。但是其实想一想,大的那个数的阶乘肯定包括小的那个数的阶乘。所以,它们的最大公约数就是小的那个数的阶乘。 1 #include <iostream> 2 #include <algorithm> 3 #include <stdlib.h> 4 #include <string> 5 #include <string.h> 6 #include <set> 7 #include <queue> 8 #include <stdbool.h> 9 #include <map> 10 #define LL long long 11 using namespace std; 12 const int MAXN=100005; 13 14 15 int main() 16 { 17 #ifndef ONLINE_JUDGE 18 freopen("../in.txt","r",stdin); 19 #endif 20 int a,b,x,i,p=1; 21 scanf("%d %d",&a,&b); 22 x=a<b?a:b; 23 for(i=1;i<=x;i++) 24 { 25 p=p*i; 26 } 27 printf("

欧几里得算法

十年热恋 提交于 2020-01-10 08:04:44
一 代码 package Euclid; /** * Copyright (C), 2020-2020, XXX有限公司 * FileName: Euclid * Author: cakin * Date: 2020/1/6 * Description: 计算两个非负数p和q的最大公约数:若q=0,则最大公约数为p。否则,将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数 * 18和8的最大公约数: * 第一次递归:p=18,q=8:r=18%8=2,所以18和8的最大公约数为8和2的最大公约数 * 第二次递归:p=8,q=2:r=8%2=0,最大公约数为2和0的最大公约数 * 第三次递归:p=2,q=0,得到最大公约数为2 */ public class Euclid { public static void main( String[] args ) { System.out.println(gcd(8,18)); } public static int gcd(int p,int q){ if(q==0){ return p; } int r = p %q; return gcd(q,r); } } 二 测试结果 2 三 说明 用于求最大公约数。 四 参考代码 https://gitee.com/cakin24/Algorithm/tree/master/src

给定两个正整数,计算这两个数的最小公倍数。

倾然丶 夕夏残阳落幕 提交于 2020-01-06 21:46:05
给定两个正整数,计算这两个数的最小公倍数。 Input 输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output 对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。 Sample Input 10 14 Sample Output 70 对于这道题,其实是考一条数学概念,即A * B = 最大公约数 x 最小公倍数。 最大公约数可以通过辗转相除法,递归得到。而最小公倍数可由上公式得到。 C++代码如下: # include <iostream> # include <string> using namespace std ; int f ( int a , int b ) { if ( b == 0 ) return a ; else return f ( b , a % b ) ; } int main ( ) { int a , b ; while ( cin >> a >> b ) { cout << a * b / f ( a , b ) << endl ; } } 来源: CSDN 作者: 秋刀. 链接: https://blog.csdn.net/qq_44953321/article/details/103856480

求最大公约数和最小公倍数

孤街醉人 提交于 2020-01-04 14:06:12
相减法 1.输入两个正整数a和b; 2.如果a > b,则a = a – b; 3.如果a < b,则 b = b – a; 4.如果a = b,则a(或b)即为两数的最大公约数 5.如果a ≠ b,则重复执行1; 6.输出最大公约数和最小公倍数。 (最小公倍数 = 原数相乘除以最大公约数) # include <stdio.h> int main ( void ) { int a , b ; scanf ( "%d%d" , & a , & b ) ; int c = a * b ; while ( a != b ) { if ( a < b ) { b = b - a ; } if ( a > b ) { a = a - b ; } } printf ( "%d %d" , a , c / a ) ; return 0 ; } 来源: CSDN 作者: Tyler Cassidy 链接: https://blog.csdn.net/TylerCassidy/article/details/103831786