输入
6 2
输出
6
1 2 3 4 6 12
解析:
如果一个数 x 是 a 的因子,y是b的因子,那么x*y一定是a*b的因子。
试除法分别获取a和b的因子,然后两层遍历的所有 a[ i ] * b[ j ] 的所有情况即为答案。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
ll n,a,b;
vector<ll>x,y;
set<ll>res;
int main(){
scanf("%lld%lld",&a,&b);
for(int i=1;i<=a/i;i++){
if(a%i==0){
x.push_back(i);
if(i!=a/i) x.push_back(a/i);
}
}
for(int i=1;i<=b/i;i++){
if(b%i==0){
y.push_back(i);
if(i!=b/i) y.push_back(b/i);
}
}
for(auto i:x){
for(auto j:y){
res.insert(i*j);
}
}
cout<<res.size()<<endl;
for(auto it:res){
cout<<it<<" ";
}
return 0;
}