Actci上课睡了一觉,下课屁颠屁颠的去找数学老师补课,问了老师一个题目:
给出两个数a,b,问a和b的全部公约数是什么?
数学老师一看这道题太简单了,不屑回答,于是就交给了你。
输入描述:
一行两个数a,b.
输出描述:
a和b的全部公约数,每个数字之间空格隔开。
示例1
输入
25 37
输出
1
示例2
输入
25 100
输出
1 5 25
备注:
对于100%的数据,1 ≤ a,b ≤ 10^13
先gcd,再遍历,记得要unique,所以的数字全取LL
unique函数属于STL中比较常用函数,它的功能是元素去重。即”删除”序列中所有相邻的重复元素(只保留一个)。此处的删除,并不是真的删除,而是指重复元素的位置被不重复的元素给占领了(详细情况,下面会讲)。由于它”删除”的是相邻的重复元素,所以在使用unique函数之前,一般都会将目标序列进行排序。
ac:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
#define MAXN 1000005
ll gcd(ll a,ll b)
{
return b==0?a:gcd(b,a%b);
}
ll ans[MAXN]={0};
int main()
{
ll a,b,x;
cin>>a>>b;
int tot=0;
x=gcd(a,b);
for(ll i=1;i*i<=x;i++)
{
if(x%i==0)
{
ans[tot]=i;
tot++;
ans[tot]=x/i;
tot++;
}
}
sort(ans,ans+tot);
int y=unique(ans,ans+tot)-ans;
for(int i=0;i<y;i++)
printf("%lld ",ans[i]);
printf("\n");
return 0;
}