链接:https://ac.nowcoder.com/acm/contest/280/C
来源:牛客网
题目描述
Actci上课睡了一觉,下课屁颠屁颠的去找数学老师补课,问了老师一个题目:
给出两个数a,b,问a和b的全部公约数是什么?
数学老师一看这道题太简单了,不屑回答,于是就交给了你。
输入描述:
一行两个数a,b.
输出描述:
a和b的全部公约数,每个数字之间空格隔开。
示例1
输入
25 37
输出
1
示例2
输入
25 100
输出
1 5 25
备注:
对于100%的数据,1 ≤ a,b ≤ 1013
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[9000000];
ll gcd(ll n,ll m)
{
return m==0?n:gcd(m,n%m);
}
int main()
{
ll a1,b;
cin>>a1>>b;
ll t=0;
ll c=gcd(a1,b);
for(ll i=1; i<=sqrt(c); i++)
{
if(c%i==0)
{
a[++t]=i;
//cout<<a[t]<<"sd "<<endl;
}
}
ll h=t;
for(ll i=t; i>=1; i--)
{
if(a[i]==c/a[i])
{
continue;
}
else
{
if(a[i]!=1)
a[++h]=c/a[i];
}
}
printf("%lld", a[1]);
for(ll i=2; i<=h; i++)
{
printf(" ");
printf("%lld", a[i]);
}
if(a[1]!=c)printf(" %lld", c);
cout<<endl;
return 0;
}