问题描述
做蓝桥杯算法题的时候发现经常会有一些简单题,使用暴力法进行遍历,却因为给的参数太大导致运行时间过久,所以在进行精简数据的时候经常会用到找一个数的因子来进行精简的算法。然而为什么找一个数的因子的时候只需要判断它的平方根呢。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll n =100;
vector<ll> a;
for(int i = 1; i <=sqrt(n); i++){
if(n % i == 0){
a.push_back(i);
if(i*i != n){
a.push_back(n/i);
}
}
}
for(ll i=0;i<a.size();i++){
cout<<a[i]<<" ";
}
return 0;
}
原因分析:
例如:25,开平方以后是5,那么整除2~5就可以了,如果有满足条件的,就是素数。而其中的因子就是1、25、5了。当遍历找到1能被25整除,也就是25%1=0的时候,那么25/1=25就一定也是25的因子。所以,在寻找因子的时候只需要遍历到n的平方根就可以找到n的所有因子了。