2023年牛客基础训练营3-K

Posted xjwrr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2023年牛客基础训练营3-K相关的知识,希望对你有一定的参考价值。

题目链接:https://ac.nowcoder.com/acm/contest/46811/K

需要的知识:
质因子公式。
介绍:
如果一个数可以化为\\(i^x*j^y*k^z\\),
则这个数的因子个数为:\\((x+1)*(y+1)*(z+1)\\),其中\\(i,j,k\\)为质数,这个定理易证。

思路:
可以将所有的数分为一段一段的,第一段数为大于等于1的数,第二段为大于等于2的数,以此类推。

第一段每增加一个数,就相当于一个因子由1变成2,相当于为一个公比为2的等比数列。
第二段相当于由2变成3,相当于才一个公比为3/2的等比数列。
以此类推:第n段相当于一个公比为(n+1)/n的等比数列。

代码:

#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
long long ci[200010];
long long qmod(long long x,long long y)
    long long ans = 1;
    while(y)
        if (y&1) ans = ans*x%mod;
        y = y>>1;
        x = x*x%mod;
    
    return ans;

int main()
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n;
    cin>>n;
    for (int i=1;i<=n;i++)
        int x;
        cin>>x;
        ci[x]++;
    
    for (int i=n;i>=1;i--) ci[i] += ci[i+1];
    long long a1 = 1;
    long long ans = 0;
    for (int i=1;i<=200000;i++)
        long long v = ci[i];
        long long q = (i+1)*qmod(i,mod-2)%mod;
        if (v) a1 = a1*q%mod;
        ans = (ans+a1*(1-qmod(q,v))%mod*qmod(1-q,mod-2)%mod)%mod;
        a1 = a1*qmod(q,max(0ll,v-1))%mod;
    
    cout<<ans;

以上是关于2023年牛客基础训练营3-K的主要内容,如果未能解决你的问题,请参考以下文章

22年牛客多校第三场(F的证明

2021-08-03训练记录

2023牛客寒假算法基础集训营

IT互联网技术分享:《2020年 MySQL集群实战》网盘资源

D宿命之间的对决2023牛客寒假算法基础集训营3

2023牛客寒假算法基础集训营1 个人题解(ACDHKL)