请计算2个数的最大公约数和最小公倍数;(最大公约数可以使用辗转相除法,最小公倍数=2个数的乘积/它们的最大公约数)
Input:
输入数据有多组,每组2个正整数a,b(2<a , b<1000)
Output:
在一行内输出a和b的最大公约数和最小公倍数;
Sample Input
15 10
Sample Output
5 30
代码如下:
#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
int main()
{
int x,y,m,n;
int gcd(int a,int b);
while(cin>>x>>y)
{
m=gcd(x,y);
n=(x/m)*y;
cout<<m<<" "<<n<<endl;
}
return 0;
}
Description
给定n(n<=10)个正整数,你的任务就是求它们的最大公约数,所有数据的范围均在long long内。
Input
输入数据有多组,每组2行,第一行为n,表示要输入数字的个数,接下来第二行有n个正整数。
Output
输出一个数,即这n个数的最大公约数。
Sample Input
5
2 4 6 8 10
2
13 26
Sample Output
2
13
#include <bits/stdc++.h>
using namespace std;
long long gcd(long long a,long long b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
long long work(long long a[],long long n)
{
long long ans=a[1];
for(int i=2;i<=n;i++)ans=gcd(ans,a[i]);
return ans;
}
int main()
{
int n,i,j,ans;
long long gcd(long long a,long long b);
long long work(long long a[],long long n);
long long a[2000];
while(cin>>n)
{
for(i=1;i<=n;i++)cin>>a[i];
long long ans=work(a,n);
printf("%d\n",ans);
}
return 0;
}