zoukankan      html  css  js  c++  java
  • 题解【洛谷P1445】[Violet]樱花

    题面

    我们首先对题目中的式子进行化简:

    [egin{aligned} frac{1}{x} + frac{1}{y} & = frac{1}{n!} \ y imes n! + x imes n! & = xy \ (x - n!) imes y & = x imes n! \ y & = frac{x imes n!}{x - n!} \ & = frac{(x-n!+n!) imes n!}{x-n!} \ & = frac{(x-n!) imes n! + n!^2}{x - n!} \ & = frac{(x-n!) imes n!}{x-n!} + frac{n!^2}{x - n!} \ & = n! + frac{n!^2}{x-n!} end{aligned}]

    因为 (x)(y) 都是正整数,所以 (frac{n!^2}{x-n!}) 也一定是正整数。

    于是问题就转化成了求 (n!^2) 的约数个数。

    由唯一分解定理得:

    [egin{aligned} n! & = p_1^{c_1} imes p_2^{c_2} imes dots imes p_k^{c_k} \ n!^2 & = p_1^{2c_1} imes p_2^{2c_2} imes dots imes p_k^{2c_k} end{aligned}]

    所以 (n!^2) 的约数个数就是 ((2c_1 + 1) imes (2c_2 + 1) imes dots imes (2c_k+1))

    先考虑一下如何求出 (n!) 的约数个数。

    我们考虑求出 (1sim n) 中的每个质数 (p)(n!) 中质因子 (p) 的个数就等于 (1sim n) 中每个数包含质因子 (p) 的个数之和。

    最后在统一约数个数时转换一下即可。

    #include <bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    
    const int N = 1000003, mod = 1000000007;
    
    int n, m;
    int pri[N], tot;
    bool st[N];
    
    inline void pre(int n)
    {
        for (int i = 2; i <= n; i+=1)
        {
            if (!st[i]) pri[++tot] = i;
            for (int j = 1; pri[j] <= n / i; j+=1)
            {
                st[pri[j] * i] = true;
                if (i % pri[j] == 0) break;
            }
        }
    }
    
    int main()
    {
        cin >> n;
        pre(n); //先筛出 1~n 中所有的质数
        LL ans = 1;
        for (int i = 1; i <= tot; i+=1)
        {
            int p = pri[i], s = 0; //枚举 1~n 的每个质因子
            for (int j = n; j; j/=p) s += j / p; //求出包含质因子 p 的个数之和
            ans = (ans * 1ll * (2 * s + 1) % mod) % mod; //求出约数个数
        }
        cout << ans % mod << endl; //注意取模
        return 0;
    }
    
  • 相关阅读:
    Lipschitz连续
    免费的论文查重网站
    花瓶的一些记录
    Transfrom笔记
    视频处理笔记
    黑魔法的注意的一些点
    UIScrollView的一些关系
    UILabel中NSAttributedString和其LinebarkModel等属性之间的关系
    lame音频编码注意的点
    AFNetworking的缓存使用
  • 原文地址:https://www.cnblogs.com/xsl19/p/12499673.html
Copyright © 2011-2022 走看看