AT_abc114_d 题解

思路

题意是求 N! 的因数中有多少个七五数。

75 分解一下,即 75=3 \times 5^2

如果要让因数 a75 个因数,则有如下几种情况:

1. a=p_1^{\alpha_1}p_2^{\alpha_2}p_3^{\alpha_3},且 (\alpha_1+1)(\alpha_2+1)(\alpha_3+1)=75,因为 75=3 \times 5^2,所以 \alpha_1,\alpha_2,\alpha_32,4,4

2. a=p_1^{\alpha_1}p_2^{\alpha_2},且 (\alpha_1+1)(\alpha_2+1)=75=3 \times25=5 \times15,所以 \alpha_1,\alpha_22,24 或者 4,14

3.a=p_1^{\alpha_1},可知 \alpha_1=74

N! 分解之后每个因数枚举一下即可。

code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
int a[N];
int n;

bool is_prime(int k) {
    if (k <= 1) {
        return 0;
    }
    for (int i = 2; i * i <= k; i++) {
        if (k % i == 0) {
            return 0;
        }
    }
    return 1;
}

int main() {
    cin >> n;
    for (int i = 1; i <= n; i++) {
        if (is_prime(i)) {
            int tmp = 1, cnt = 0;
            while (tmp * i <= n) {
                tmp *= i;
                cnt += n / tmp;
            }
            a[cnt]++;
        }
    }
    for (int i = 100; i >= 1; i--) a[i] += a[i + 1];
    cout << a[74] + a[4] * (a[4] - 1) / 2 * (a[2] - 2) + a[24] * (a[2] - 1) + a[14] * (a[4] - 1);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值