求最小共倍数:
最小共倍数=两数的成绩÷最大公约数。
求最大公约数:
- 辗转相除法
- 相减法
辗转相处:
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
#include<bits/stdc++.h> using namespace std; int main(){// 辗转相除法求最大公约数 int a,b,c; scanf("%d%d",&a,&b); int m=a,n=b; while(c!=0){// 余数不为0,继续相除,直到余数为0 c=a%b; a=b; b=c; } printf("The largest common divisor:%d\n",a);//注意这里不是b,因为跳出循环时b已经是c了 printf("The least common multiple:%d",m*n/a); return 0; }
相减法:
有两整数a和b:
① 若a>b,则a=a-b
② 若a<b,则b=b-a
③ 若a=b,则a(或b)即为两数的最大公约数
④ 若a≠b,则再回去执行①
例如求27和15的最大公约数过程为:
27-15=12( 15>12 ) 15-12=3( 12>3 )
12-3=9( 9>3 ) 9-3=6( 6>3 )
6-3=3( 3==3 )
因此,3即为最大公约数
#include<bits/stdc++.h> using namespace std; int a,b; int main(){ scanf("%d%d",&a,&b); int m=a,n=b; while(a!=b){ if(a>b)a=a-b; if(a<b)b=b-a; } printf("The largest common divisor:%d\n",a); printf("The least common multiple:%d",m*n/a); return 0; }
洛谷小题:
#include<bits/stdc++.h> using namespace std; int x,y; int ans; int gcd(int a,int b){//求最大公约数 //if(a<b)swap(a,b); if(a%b==0)return b; if(a==b)return b; return gcd(b,a%b); } int lcm(int a,int b){//求最小共倍数 return a*b/gcd(a,b); } int main(){ scanf("%d%d",&x,&y); for(int i=x;i<=y;i++){ int j=x*y/i; if(gcd(i,j)==x&&lcm(i,j)==y){ ans++; } } printf("%d",ans); return 0; }
原文链接: https://www.cnblogs.com/LightyaChoo/p/13226840.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/361460
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!