目录
说到枚举约数,不得不说一下什么是约数。
一、约数的定义
约数,又称因数。整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a称为b的倍数,b称为a的约数。
二、分析如何枚举约数
所以根据整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,b称为a的约数。这句话可得知我们的判断条件
cin>>n;
.....
for(int i = 1 ; i*i<n ; i++) if(n%i==0) cout<<i;
但是如果输入为25,那么最后会输出:
1
为什么呢?
原因是,我们只枚举了小于sqrt(n)(根号n),所以只有1
没有5是因为我们枚举到小于i*i<n,所以没有包括上。
应该加一个判断
if(i*i==n){
cout<<i;
}
我们只枚举了一半,剩下另一半未枚举到,所以剩下的一半就是 n/i
三、代码实现
我在此处使用了set来去重(什么事set见我的文章C++STL容器set)
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
set<int> s;
void yueshu(int n){
for(int i = 1 ; i*i<=n ; i++){
if(n%i == 0){
v.push_back(i);
if(i*i == n) v.push_back(i);
}
}
sort(v.begin(),v.end());
set<int>::iterator it;
for(int i = 0 ; i<v.size() ; i++) s.insert(v[i]);
for(it = s.begin() ; it!=s.end() ; it++) cout<<*it<<" ";
}
int main()
{
int n;
cin>>n;
yueshu(n);
return 0;
}