#46. 最大公约数和最小公倍数
统计
描述
提交
自定义测试
管理
题目描述
给定两个整数:a b,求 a和b 的最大公约数和最小公倍数。
输入格式
两个正整数:a和b (0<a,b<=10000)
输出格式
两个正整数,分别是输入的两个正整数的最大公约数和最小公倍数。 两个数用一个空格分开。
样例数据
input
6 8
output
2 24
数据规模与约定
保证a,b≤10000a,b≤10000。
时间限制:1s1s
空间限制:256MB256MB
注:这题我想了很久,有必要写写
这题的难点在于最小公倍数,但很简单(虽然我想了很久)
题解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,n=0,s=0,t;//n公约数;s公倍数;
cin>>a>>b;
if(b>a)
{
t=a;
a=b;
b=t;
} //保证a最大,好循环;
for(int i=1;i<=sqrt(a*1.0);i++)
if(a%i==0&&b%i==0) n=i;
s=a*b/n;
cout<<n<<' '<<s;
}
s=a*b/n;
这我想了很久,自己算算就好了
如果数据太大
for(int i=1;i<=sqrt(a*1.0);i++)
if(a%i==0&&b%i==0) n=i;
这个就不能用了
要辗转相除法:
#include<iostream.h>
int maxCD(int a,int b)
{
int dividend,divisor;
dividend= a>b?a:b;//两个数中的大数
divisor = a<b?a:b;//两个数中的小数
if(dividend%divisor!=0)
{
return maxCD(divisor,dividend%divisor);
}
else
{
return divisor;
}
}
int minCD(int a,int b)
{
return a*b/maxCD(a,b);
}
void main()
{
int r,l,m=15,n=20;
r=maxCD(m,n);
l=minCD(m,n);
cout<<"m,n的最大公约数是:"<<r<<endl;
cout<<"m,n的最小公倍数是:"<<l<<endl;
}
题和变量不一样,看懂就行。。。
统计
描述
提交
自定义测试
管理
题目描述
给定两个整数:a b,求 a和b 的最大公约数和最小公倍数。
输入格式
两个正整数:a和b (0<a,b<=10000)
输出格式
两个正整数,分别是输入的两个正整数的最大公约数和最小公倍数。 两个数用一个空格分开。
样例数据
input
6 8
output
2 24
数据规模与约定
保证a,b≤10000a,b≤10000。
时间限制:1s1s
空间限制:256MB256MB
注:这题我想了很久,有必要写写
这题的难点在于最小公倍数,但很简单(虽然我想了很久)
题解:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,n=0,s=0,t;//n公约数;s公倍数;
cin>>a>>b;
if(b>a)
{
t=a;
a=b;
b=t;
} //保证a最大,好循环;
for(int i=1;i<=sqrt(a*1.0);i++)
if(a%i==0&&b%i==0) n=i;
s=a*b/n;
cout<<n<<' '<<s;
}
s=a*b/n;
这我想了很久,自己算算就好了
如果数据太大
for(int i=1;i<=sqrt(a*1.0);i++)
if(a%i==0&&b%i==0) n=i;
这个就不能用了
要辗转相除法:
#include<iostream.h>
int maxCD(int a,int b)
{
int dividend,divisor;
dividend= a>b?a:b;//两个数中的大数
divisor = a<b?a:b;//两个数中的小数
if(dividend%divisor!=0)
{
return maxCD(divisor,dividend%divisor);
}
else
{
return divisor;
}
}
int minCD(int a,int b)
{
return a*b/maxCD(a,b);
}
void main()
{
int r,l,m=15,n=20;
r=maxCD(m,n);
l=minCD(m,n);
cout<<"m,n的最大公约数是:"<<r<<endl;
cout<<"m,n的最小公倍数是:"<<l<<endl;
}
题和变量不一样,看懂就行。。。