題解ios
其實該題考察的就是一個質因數分解,而後進行組合便可。spa
證實以下:code
$n=p_1^{\alpha_1} \times p_2^{\alpha_2} \times ... \times p_k^{\alpha_k}$blog
$d=p_1^{\beta_1} \times p_2^{\beta_2} \times ... \times p_k^{\beta_k}$ci
其中 $p_一、p_二、...、p_k$ 全是質數。io
而 $0 \le \beta \le \alpha$,而 $\beta$ 的不一樣取值對應 $n$ 不一樣的約數,則 $\beta_一、\beta_2 ... \beta_k$ 總共組合數爲 $(\alpha_1 + 1)(\alpha_2 + 1)+...+(\alpha_k + 1)$。class
#include <iostream> using namespace std; typedef long long LL; const int N = 1024; int n; int p[N], ans; // 質因數分解 int main() { cin >> n; for (int i = 2; i <= n; ++i) { int a = i; for (int j = 2; j <= a / j; ++j) { if (a % j == 0) { while (a % j == 0) { p[j]++; a /= j; } } } if (a > 1) p[a]++; } for (int i = 2; i <= n; ++i) { if (p[i] > 0) { cout << i << " " << p[i] << endl; } } // 溢出風險 LL res = 1; for (int i = 2; i <= n; ++i) { if (p[i] > 0) { res = res * (p[i] + 1); } } cout << res << endl; return 0; }
這一題,y 總講過,可考試的時候,簡單覺得是 $2$ 的倍數,嗚嗚嗚~~~,對不起 y 總。stream