問題の説明
ブルーブリッジカップのアルゴリズムの問題を行うと、総当たり法を使用してトラバースする単純な問題がよくあることがわかりましたが、与えられたパラメータが大きすぎるため、実行時間が長すぎます。そのため、データを単純化するときに、アルゴリズムを簡素化するために、数因数を見つける方法を使用します。しかし、数値の因数を求めるときに平方根だけを判断する必要があるのはなぜでしょうか。
#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 のすべての因数を見つけることができます。