这里同样可以试除法求约数。
注意
1.这里i从1开始,当n%i==0时要判断边界情况,如果i!=n/i,就把n/i存进去,最后再进行排序
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int a[N],cnt;
void yueshu(int n){
for(int i=1;i<=n/i;i++){
if(n%i==0){
a[cnt++]=i;
if(i!=n/i)a[cnt++]=n/i;
}
}
sort(a,a+cnt);
}
int main(){
int n;
cin>>n;
yueshu(n);
for(int i=0;i<cnt;i++){
cout<<a[i];
}
return 0;
}
求两个数的最大公约数
#include <iostream>
#include <algorithm>
using namespace std;
int gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
int main()
{
int n;
cin >> n;
while (n -- )
{
int a, b;
scanf("%d%d", &a, &b);
printf("%d\n", gcd(a, b));
}
return 0;
}