C++ 素因数分解して約数の個数を求める
競プロでよく出てくる素因数分解と約数の求め方
約数の個数は素因数分解したそれぞれの数字のn乗+1を掛け合わせたもので求めることができる。
参考
juken-mikata.net
#include<iostream> #include <vector> using namespace std; int main() { int n; int ans = 1; cin >> n; vector<int> x(n + 1); int num = n; // 素因数分解する変数num for (int i = 2; i <= n; i++) { while (num%i == 0) { // 素数で割り切れなくなるまで割っていく x.at(i)++; //割った個数を配列に足す num /= i; } } for (int i = 2; i <= n; i++) { ans *= x.at(i) + 1; //それぞれを+1して掛けていく } cout << ans << endl; return 0; }
素因数分解は良く出てくるので覚えておく
参考問題
atcoder.jp