ぐってぃのプログラミング日記

競技プログラミングやIT関係の記事を書いていくよ

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