• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[2020蓝桥杯B组决赛]C-阶乘的约数

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

题解

  其实该题考察的就是一个质因数分解,然后进行组合即可。

  证明如下:

       $n=p_1^{\alpha_1} \times p_2^{\alpha_2}  \times ... \times p_k^{\alpha_k}$

       $d=p_1^{\beta_1} \times p_2^{\beta_2}  \times ... \times p_k^{\beta_k}$

  其中 $p_1、p_2、...、p_k$ 全是质数。

       而 $0 \le \beta \le \alpha$,而 $\beta$ 的不同取值对应 $n$ 不同的约数,则 $\beta_1、\beta_2 ... \beta_k$ 总共组合数为 $(\alpha_1 + 1)(\alpha_2 + 1)+...+(\alpha_k + 1)$。

#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 总。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
2018蓝桥杯C/C++组第4题第几个幸运数发布时间:2022-07-14
下一篇:
学习C#基础知识这段时间发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap