![169991389eb9c58d7ef54f688f25add1.png](https://img-blog.csdnimg.cn/img_convert/169991389eb9c58d7ef54f688f25add1.png)
最大公约数
时间限制: 1 Sec 内存限制: 128 MB
题目描述
有两个正整数,想知道它们的最大公约数和最小公倍数,你有什么办法?
输入
一行:两个数m,n (0
输出
一行:最大公约数和最小公倍数,用空格隔开
![c9129e4faa8056200e11f2843c4ab98c.png](https://img-blog.csdnimg.cn/img_convert/c9129e4faa8056200e11f2843c4ab98c.png)
最大公倍数
样例输入
6 8
样例输出
2 24
提示
算法分析:分别用m,n,r来表示被除数、除数和余数
(1) 求M/N的余数r; (2)若r=0;,则n为最大公约数;若r<>0,则执行第(3)步
(3)将n的值赋给M,将r的值赋给N
(4)返回重新执行第(1)步
![648e3f88378357999f705c360e8005ff.png](https://img-blog.csdnimg.cn/img_convert/648e3f88378357999f705c360e8005ff.png)
答案在下方
答案:
#includeusing namespace std;bool pd(long long n){ bool t=true; if(n<=1) t=false; for(long long i=2;i*i<=n;i++) { if(n%i==0) t=false; } return t;}int main(){ int n,m,y=1,b=1,t1,t2,i; cin>>m>>n; t1=m;t2=n; i=2; while(!pd(t1)&&!pd(t2)) { if(t1%i==0&&t2%i==0) { t1/=i;t2/=i; y*=i; } else { i++; if(i%2==0) { i=2; } if(i%3==0) { i=3; } } } t1=m;t2=n; i=2; while(!pd(t1)&&!pd(t2)) { if(t1%i==0&&t2%i==0) { t1/=i;t2/=i; b*=i; } else { i++; if(i%2==0) { i=2; } if(i%3==0) { i=3; } } } b*=t1*t2; cout<