[2020藍橋杯B組決賽] C-階乘的約數

題解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

相關文章
相關標籤/搜索