1、试除法求约数
#include <iostream>
#include <queue>
using namespace std;
int main(){
int n;cin>>n;
while(n--)
{
priority_queue<int,vector<int>,greater<int>>pq;
int x;
cin>>x;
for(int i=1;i<=x/i;i++)
{
if(x%i==0){
pq.push(i);
if(i!=x/i)pq.push(x/i);
}
}
while(pq.size())
{
auto t = pq.top();
cout<<t<<" ";
pq.pop();
}
cout<<endl;
}
}2、最大公约数(辗转相除法)
2.1、思路
2.2、代码
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int a, b;
cin >> a >> b;
//辗转相除,直到小括号内右边数为0
while(b)
{
//c 一定小于 b
int c = a % b;
//小括号左边放除数,右边放约数
a = b;
b = c;
}
//小括号内左边数为最大公约数
cout << a << endl;
}
}2.3、库函数__gcd(a,b)优化
原理

#include<iostream>
#include<algorithm>//__gcd(a,b)函数求解a与b的最大公约数
using namespace std;
int main(){
int n;
cin>>n;
while(n--)
{
int a,b;
cin>>a>>b;
cout<<__gcd(a,b)<<endl;
}
}