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的主要内容,如果未能解决你的问题,请参考以下文章